2017-02-07 4 views
0

私はUILabelを表のセルに入れました。私はインターフェイスビルダーでそのフォントを設定しました。セルが表示されたら、私はHTML文字列をとり、NSAttributedStringに変換します。ここでラベルのフォントタイプとサイズを使用し、そのHTMLテキストのデフォルトフォントとして使用します。UITableViewCellのUILabelは、すべてのwillDisplayCellでフォントサイズを2倍にしています

問題は、セルが再利用されるたびに、ラベルのフォントがそのサイズを2倍にすることです。 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メソッドは、セルをデキューして返します。willDisplayメソッドは、このような処理を行います(Ttはいくつかの抽象レイヤーを通過しますが、これはUIエレメントに触れる唯一のコードです。 ):最後に

label.attributedText = htmlString?.getHtml2AttributedString(font: label.font) 
+0

'cellForRowAtIndexPath'コードを追加できますか? – Priyal

+0

@Priyal私は、より多くの情報と 'willDisplay'メソッドの中核を追加しました – shelll

答えて

0

これはattributedTextプロパティを設定した後、それが自動的にattributedTextのプロパティに基づいてそのフォントプロパティを変更すること、UILabelの「機能」です。詳細はanother SO questionにあります。

関連する問題