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

UITableVIewCell 中的 UIScrollView 不会滚动

UITableViewCell 中的 UITextField - UIButton