作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 NSAttributedString.DocumentType.html 在 tableview 单元格的多个标签上显示 html 格式的字符串,如下所示
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "labelCell")!
let htmlDescription = try! NSAttributedString(
data: self.Structures[indexPath.section].description.data(using: .unicode, allowLossyConversion: true)!,
options:[.documentType: NSAttributedString.DocumentType.html,
.characterEncoding: String.Encoding.utf8.rawValue],
documentAttributes: nil)
cell.textLabel?.numberOfLines = 0
cell.textLabel?.attributedText = htmlDescription
return cell
}
这按预期工作,但速度非常慢,并且在操作完成之前 View 会卡住。这对于生产级别的工作来说很糟糕。我的问题是如何优化它以防止卡住?
最佳答案
我也遇到过类似的问题。虽然 @LGP 解决方案可能适合您,但我已经满足了一个不太棘手的解决方案 - 而且它可能对您来说也足够了。在我的例子中,真正效率低下的是将 HTML 解析为 NSAttributedString。即使在 @LGP 的解决方案中,这也必须发生。
我使用了一种非常简单的方法 - 当我从后端加载数据时,作为解析响应的一部分,我还解析了 HTML。这使得后端调用变得更加冗长(当然),但是模型本身已经包含了 NSAttributedString,而不是需要解析的 String。
如果你尝试一下,你的 cellForRow
将看起来像这样(但我想从我试图解释的内容中可以清楚地看出这一点):
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "labelCell")!
let htmlDescription = self.Structures[indexPath.section].attributedDescription
cell.textLabel?.numberOfLines = 0
cell.textLabel?.attributedText = htmlDescription
return cell
}
这将使表格的渲染更少的资源需求并且更快(在我的例子中,这是滞后滚动和平滑滚动之间的区别)。
当然,在这种情况下,在模型解析期间的某个地方,您必须使用:
self.attributedDescription = try! NSAttributedString(
data: description.data(using: .unicode, allowLossyConversion: true)!,
options:[.documentType: NSAttributedString.DocumentType.html,
.characterEncoding: String.Encoding.utf8.rawValue],
documentAttributes: nil)
关于html - Swift : Displaying HTML data in a label using NSAttributedString. DocumentType.html 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48606122/
我是一名优秀的程序员,十分优秀!