UITableViewCell 中的 UILabel 在每个 willDisplayCell 上将字体大小加倍
UILabel in UITableViewCell is doubling font size on every willDisplayCell
我在 table 单元格中有一个 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
方法只是将一个单元格出列,然后 returns 它和 willDisplay
方法做类似的事情(Tt 经历了几层抽象,但这是唯一的代码接触 UI 个元素。单元格只有一个标签,仅此而已):
label.attributedText = htmlString?.getHtml2AttributedString(font: label.font)
最后,这是 UILabel
的 "feature",在设置 attributedText 属性 后,它会根据 attributedText 的属性自动更改其字体 属性。更多内容可在 another SO question.
中找到
我在 table 单元格中有一个 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
方法只是将一个单元格出列,然后 returns 它和 willDisplay
方法做类似的事情(Tt 经历了几层抽象,但这是唯一的代码接触 UI 个元素。单元格只有一个标签,仅此而已):
label.attributedText = htmlString?.getHtml2AttributedString(font: label.font)
最后,这是 UILabel
的 "feature",在设置 attributedText 属性 后,它会根据 attributedText 的属性自动更改其字体 属性。更多内容可在 another SO question.