我试图创建一个多页PDF与UITextView在每一页与所需的属性文本。但是,当我遇到一个问题,一旦应用程序存档和分发通过TestFlight进行测试。
下面是我用来生成多页的示例代码,
var textStorage = NSTextStorage()
textStorage = NSTextStorage(attributedString: attString)
let layoutManager = NSLayoutManager()
textStorage.addLayoutManager(layoutManager)
var pageSize = CGRect(x: 44, y: 108, width: 507, height: 690)
var lastGlyph = 0
while lastGlyph < layoutManager.numberOfGlyphs {
let textContainer = NSTextContainer()
let background = UINib(nibName: "background", bundle: nil).instantiate(withOwner: nil, options: nil)[0]
background.frame = pageRect
textContainer.size = subsequentPageSize.size
layoutManager.addTextContainer(textContainer)
let textView = UITextView(frame: pageSize, textContainer: textContainer)
pageSize.origin.x += pageSize.width
background.addSubview(textView)
context.beginPage()
background.layer.render(in: UIGraphicsGetCurrentContext()!)
lastGlyph = NSMaxRange(layoutManager.glyphRange(for: textContainer))
}如果从Xcode构建时在模拟器或设备上运行,这是非常好的,但是一旦应用发布,layoutManager.numberOfGlyphs总是返回0,即使我打印()它显示的布局管理器,
<NSLayoutManager: 0x7ff313c9f6d0>
0 containers, text backing has 57 characters
Currently holding 57 glyphs.
Glyph tree contents: 57 characters, 57 glyphs, 1 nodes, 64 node bytes, 64 storage bytes, 128 total bytes, 2.25 bytes per character, 2.25 bytes per glyph
Layout tree contents: 57 characters, 57 glyphs, 0 laid glyphs, 0 laid line fragments, 1 nodes, 64 node bytes, 0 storage bytes, 64 total bytes, 1.12 bytes per character, 1.12 bytes per glyph, 0.00 laid glyphs per laid line fragment, 0.00 bytes per laid line fragment'.我是不是漏掉了一些愚蠢的东西,或者是不是有一个我不知道的bug?我无法为我的一生明白它为什么不起作用!
感谢你所能给予的帮助。
发布于 2020-10-08 08:32:33
我最终在NSTextStorage子类注释中找到了一个解决方案,
--NSTextStorage类--实现了更改管理(通过NSTextStorage()和endEditing()方法)、属性验证、委托处理和布局管理通知。它没有实现的一个方面是管理实际的属性字符串存储,子类通过覆盖两个NSAttributedString原语来管理.
因此,我修改了我的代码,并将textStorage.beginEditing()和textStorage.endEditing()添加到整个序列的开头和结尾,如下所示,一旦项目实现并直接从Xcode构建到设备或模拟器,它就可以工作了。
var textStorage = NSTextStorage()
textStorage.beginEditing()
if attribString != nil {
textStorage = NSTextStorage(attributedString: attribString)
} else {
textStorage = NSTextStorage(string: string)
}
let layoutManager = NSLayoutManager()
textStorage.addLayoutManager(layoutManager)
var pageSize = CGRect(x: 44, y: 108, width: 507, height: 690)
var lastGlyph = 0
while lastGlyph < layoutManager.numberOfGlyphs {
let textContainer = NSTextContainer()
let background = UINib(nibName: "background", bundle: nil).instantiate(withOwner: nil, options: nil)[0]
background.frame = pageRect
textContainer.size = subsequentPageSize.size
layoutManager.addTextContainer(textContainer)
let textView = UITextView(frame: pageSize, textContainer: textContainer)
background.addSubview(textView)
context.beginPage()
background.layer.render(in: UIGraphicsGetCurrentContext()!)
lastGlyph = NSMaxRange(layoutManager.glyphRange(for: textContainer))
}
textStorage.endEditing()https://stackoverflow.com/questions/64215124
复制相似问题