UITableViewCell 中的 UILabel 将每个 willDisplayCell 的字体大小加倍
Posted
技术标签:
【中文标题】UITableViewCell 中的 UILabel 将每个 willDisplayCell 的字体大小加倍【英文标题】:UILabel in UITableViewCell is doubling font size on every willDisplayCell 【发布时间】:2017-02-07 14:36:39 【问题描述】:我在表格单元格中有一个UILabel
,我已经在界面生成器中设置了它的字体。现在,当显示单元格时,我获取 html 字符串并将其转换为 NSAttributedString
,在其中我使用标签的字体类型和大小并将其用作该 HTML 文本的默认字体。
问题是每次重复使用单元格时,其标签的字体都会使其大小翻倍,例如从 17 点开始,然后是 34、68 到数百万...
我从来没有在标签的字体属性中设置任何东西,为什么它会改变?
这是我的字符串扩展,用于将其格式化为 NSAttributeString:
public func getHtml2AttributedString(font: UIFont) -> NSAttributedString?
let modifiedString = "<style>bodyfont-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
方法的核心
【参考方案1】:
最后,这是UILabel
的一个“功能”,在设置属性文本属性后,它会根据属性文本的属性自动更改其字体属性。更多可以在another SO question找到。
【讨论】:
以上是关于UITableViewCell 中的 UILabel 将每个 willDisplayCell 的字体大小加倍的主要内容,如果未能解决你的问题,请参考以下文章
更改 UITableViewCell 中的对象也更改了重用 UITableViewCell 的对象
确定 UITableViewCell 中的 UIButton
UITableViewCell 事件中的 UIButton 不起作用
UITableViewCell 中的 UICollectionView