【问题标题】:UILabel in UITableViewCell is doubling font size on every willDisplayCellUITableViewCell 中的 UILabel 将每个 willDisplayCell 的字体大小加倍
【发布时间】: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


【解决方案1】:

最后,这是UILabel 的一个“功能”,在设置属性文本属性后,它会根据属性文本的属性自动更改其字体属性。更多可以在another SO question找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-15
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多