我发现了一个bug,它是用NSAttributedString
解析HTML字符串,并使用AttributedText
在UITextView
中使用它。错误是这样的:
Assert失败:(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
}
要将其用于一些textview,只需简单地调用:
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
解析会导致崩溃。
1条答案
按热度按时间bkhjykvo1#
如果HTML字符串在句子中间包含
,则会发生此问题。在将html转换为属性字符串之前,只需将
替换为空格,然后转换它。我希望这个答案对你有帮助。