2017-02-07 41 views
0

我在表格單元格中有一個UILabel,我在界面生成器中設置了它的字體。現在,當單元格被顯示時,我將HTML字符串和它轉換爲NSAttributedString,我使用該標籤的字體類型和大小,並將其用作該HTML文本的默認字體。UITableViewCell中的UILabel將每個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 
    } 
} 

編輯: 才發現,原來的字體並不總是加倍它的大小,但它可以通過只是幾個點放大。並且還可以改變重量,例如從正常到粗體。

cellForRowAt方法只取出一個細胞,並返回它和willDisplay方法做這樣的事情(Tt的經過抽象的數層,但是這是一個觸及UI元素的唯一代碼,細胞只有一個標籤,僅此而已):

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

你可以添加'cellForRowAtIndexPath'代碼嗎? – Priyal

+0

@Priyal我只是增加了更多的信息和'willDisplay'方法的核心 – shelll

回答

0

這到底是UILabel的「功能」,即設置attributedText屬性後,它自動的基礎上,attributedText的屬性改變其字體屬性。更多可以在another SO question找到。

相關問題