我发现了一个错误,即使用
NSAttributedString
解析 HTML 字符串并使用 UITextView
在 AttributedText
中使用它。错误是这样的:
断言失败: (forceBreakIndex > NSMaxRange(lastResortNode->lineBreak.range)),函数 -[_NSOptimalLineBreaker _calculateOptimalWrapping],文件 NSOptimalLineBreaker.m,第 1706 行。
解析在 iOS 15 或更低版本上似乎运行良好。但在 iOS 16 或更高版本中,它会因上述错误而崩溃。
有什么解决方法吗,或者这只是 iOS 版本的问题?
我尝试过用最简单的
NSAttributedString
来解析HTML内容,但是在iOS 16以上还是会崩溃。
所以对于我的 HTML 内容的解析代码,我使用这个:
func setHTMLContent(_ htmlContent: String, font: UIFont, textColor: UIColor) {
guard let attributedString = try? NSMutableAttributedString(data: htmlContent.data(using: .utf8)!, options: [.documentType: NSAttributedString.DocumentType.html], documentAttributes: nil) else { return }
attributedString.addAttributes([.font: font, .foregroundColor: textColor], range: NSRange(location: 0, length: attributedString.length))
self.attributedText = attributedString
}
并将其用于某些文本视图,只需简单地调用:
SomeTextView.setHTMLContent("Some HTML content", font: UIFont.systemFont(ofSize: 14), textColor: .white)
对于某些 HTML,它在 iOS 16 以上版本上完美运行。但对于另一个 HTML,它会在 iOS 16 以上版本上崩溃。但在下面的 iOS 16 上运行得很好。我无法提供导致崩溃的 HTML 内容,因为它是机密的。为什么我认为问题不在 HTML 内容中,因为例如在 iOS 15 上它工作得很好,所以我认为这可能是在 iOS 16 上使用
NSAttributedString
解析导致崩溃的原因。
如果 html 字符串在句子中间包含 ,则会发生此问题。 在将 html 转换为属性字符串之前,只需将 替换为空格,然后进行转换。 希望这个回答对你有帮助。