У меня есть UILabel
в ячейке таблицы, я установил его шрифт в построителе интерфейса. Теперь, когда ячейка отображается, я беру строку HTML и конвертирую ее в NSAttributedString
, где я использую тип и размер шрифта ярлыка и использую его в качестве шрифта по умолчанию для этого текста HTML.UILabel в UITableViewCell удваивает размер шрифта на каждом willDisplayCell
Проблема в том, что каждый раз, когда ячейка повторно используется, шрифт ее метки удваивает ее размер, например. начинается с 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
}
}
EDIT: Просто обнаружил, что шрифт не всегда удваивает свой размер, но это может увеличить его только несколько пунктов. И может также изменить вес, например. от нормального до полужирного.
Метод cellForRowAt
просто dequeues ячейки и возвращает его и метод willDisplay
делает что-то вроде этого (Tt проходит через несколько слоев абстракций, но это единственный код, который затрагивает элементы пользовательского интерфейса. Ячейка имеет только одну метки, не более):
label.attributedText = htmlString?.getHtml2AttributedString(font: label.font)
Вы можете добавить код cellForRowAtIndexPath? – Priyal
@Priyal Я добавил дополнительную информацию и ядро метода 'willDisplay' – shelll