【发布时间】:2017-02-07 14:36:39
【问题描述】:
我在表格单元格中有一个UILabel,我已经在界面生成器中设置了它的字体。现在,当显示单元格时,我获取 HTML 字符串并将其转换为 NSAttributedString,在其中我使用标签的字体类型和大小并将其用作该 HTML 文本的默认字体。
问题是每次重复使用单元格时,其标签的字体都会使其大小翻倍,例如从 17 点开始,然后是 34、68 到数百万...
我从来没有在标签的字体属性中设置任何东西,为什么它会改变?
这是我的字符串扩展,用于将其格式化为 NSAttributeString:
public func getHtml2AttributedString(font: UIFont) -> NSAttributedString? {
let modifiedString = "<style>body{font-family: '\(font.fontName)'; font-size:\(font.pointSize)px; margin:0; padding:0;}</style>\(self)";
guard let data = modifiedString.data(using: .utf8) else {
return nil
}
do {
return try NSAttributedString(data: data,
options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue],
documentAttributes: nil)
}
catch {
print(error)
return nil
}
}
编辑: 刚刚发现字体并不总是将其大小翻倍,但它可以将其放大几分。并且还可以改变重量,例如从正常到粗体。
cellForRowAt 方法只是将一个单元格出列并返回它,willDisplay 方法执行类似的操作(Tt 经历了几层抽象,但这是唯一涉及 UI 元素的代码。单元格只有一个标签,仅此而已):
label.attributedText = htmlString?.getHtml2AttributedString(font: label.font)
【问题讨论】:
-
可以加
cellForRowAtIndexPath代码吗? -
@Priyal 我刚刚添加了更多信息和
willDisplay方法的核心
标签: html ios uitableview uilabel nsattributedstring