UITableViewCell中的UILabel在每个willDisplayCell上都加倍了字体大小

时间:2017-02-07 14:36:39

标签: html ios uitableview uilabel nsattributedstring

我在表格单元格中有一个UILabel,我在界面构建器中设置了它的字体。现在,当显示单元格时,我将使用HTML字符串并将其转换为NSAttributedString,其中我使用标签的字体类型和大小,并将其用作该HTML文本的默认字体。

问题在于,每次重复使用单元格时,其标签的字体数量会翻倍,例如:从17点开始,然后是34点,68点到数百万点......

我从未在标签的font属性中设置任何内容,为什么它可能会改变?

这是我的String扩展,用于将其格式化为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)

1 个答案:

答案 0 :(得分:0)

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

相关问题