gpt4 book ai didi

html - Swift : Displaying HTML data in a label using NSAttributedString. DocumentType.html 慢

转载 作者:行者123 更新时间:2023-11-29 00:04:15 31 4
gpt4 key购买 nike

我正在使用 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com