在 UILabel 中显示 HTML 文本,性能问题。 [iPhone SDK、iOS 8、Swift]
Posted
技术标签:
【中文标题】在 UILabel 中显示 HTML 文本,性能问题。 [iPhone SDK、iOS 8、Swift]【英文标题】:Displaying HTML Text in UILabel, performance issues. [iPhone SDK, iOS 8, Swift] 【发布时间】:2014-10-08 10:36:43 【问题描述】:我正在尝试在 UILabel 中显示格式正确的 html 文本,并成功使用以下代码:
// Create the html body
var attributedHTMLBody = NSAttributedString(data: comment.bodyHTML.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: false), options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil, error: nil)
// Create the string including the text style
var htmlString = String(format: "<div style='font-size: 16px; font-family: HelveticaNeue-Light;'>%@", attributedHTMLBody.string)
// Create the final text to display
var attributedHML = NSAttributedString(data: htmlString.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: false), options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil, error: nil)
// Set the text
cell.commentLabel.attributedText = attributedHML
// Find the locations of any links
var mutableLinkArray = NSMutableArray()
var mutableRangeArray = NSMutableArray()
attributedHML.enumerateAttributesInRange(NSMakeRange(0, attributedHML.length), options: NSAttributedStringEnumerationOptions.LongestEffectiveRangeNotRequired, usingBlock: attribute, range, stop in
// Get the attributes
var attributeDictionary = NSDictionary(dictionary: attribute)
if let link = attributeDictionary.objectForKey("NSLink") as? NSURL
mutableLinkArray.addObject(link)
mutableRangeArray.addObject(range)
)
// Add links to the label
for var i = 0; i < mutableLinkArray.count; i++
cell.commentLabel.addLinkToURL(mutableLinkArray[i] as NSURL, withRange: mutableRangeArray[i] as NSRange)
// Set the labels delegate
cell.commentLabel.delegate = self
代码还正确地找到并定位了文本中的链接,并允许用户使用 TTTAtributedLabel 委托点击它们。
然而,这段代码运行得很慢,表格单元格不允许平滑滚动,而是完全停止,然后在单元格创建后向下跳转。
作为一个注释,我已经尝试注释掉属性的枚举以查看这是否是问题,但这根本不会加速单元格的创建。
如何改进此代码,谢谢!
【问题讨论】:
尝试使用文本视图而不是标签,看看是否有帮助。 我尝试过使用文本视图,但如果我可以使用 UILabel (TTTAtributedLabel) 来计算单元格的高度等会简单得多。 您支持哪些操作系统版本?在 ios7 及更高版本中,计算文本视图所需的高度非常简单。在 iOS8 中,你可以让系统自动为你做这件事。 我的目标是iOS8。能否提供一个简单的示例项目或代码向我表示感谢! 【参考方案1】:使用UITextView
。
使用iOS8,实现动态单元格高度非常简单。使用文本视图设置单元格,并围绕文本视图和单元格上的其他视图设置约束。确保在界面生成器中将内容压缩阻力和内容拥抱优先级设置为 100%。您可以在代码中实现所有这些,但在界面构建器中要简单得多。
现在在代码中,当您的控制器加载时,将 估计 单元格高度设置为您认为有些准确的估计值。表格视图将根据内容显示具有正确高度的单元格。
【讨论】:
在将html字符串转换为属性文本以在tableview中设置时,默认情况下在底部添加一些底部空间..这是什么原因以上是关于在 UILabel 中显示 HTML 文本,性能问题。 [iPhone SDK、iOS 8、Swift]的主要内容,如果未能解决你的问题,请参考以下文章
我们可以在 UILabel 上显示 HTML 表格吗(属性文本)