2017-02-07 23 views
0

У меня есть 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) 
+0

Вы можете добавить код cellForRowAtIndexPath? – Priyal

+0

@Priyal Я добавил дополнительную информацию и ядро ​​метода 'willDisplay' – shelll

ответ

0

В конце концов, это «особенность» в UILabel, что после установки свойства attributedText она автоматически изменяет свойства шрифта на основе свойств attributedText в. Подробнее можно найти в another SO question.

 Смежные вопросы

  • Нет связанных вопросов^_^