2017-09-25 76 views
-1

我有一個方便的擴展是這樣的:的UILabel與attributedText在自定義的UITableViewCell:顏色不渲染,直到重用(iOS10)

extension NSMutableAttributedString { 

    func append(string: String, attributes: [String: Any]) { 
     let attributed = NSMutableAttributedString(string: string) 
     let range = NSRange(location: 0, length: string.utf16.count) 
     for (attribute, value) in attributes { 
      attributed.addAttribute(attribute, value: value, range: range) 
     } 
     append(attributed) 
    } 
} 

我的造型文字在我的UILabel正是如此:

let normalAttributes = [NSForegroundColorAttributeName: darkGray] 
let lightAttributes = [NSForegroundColorAttributeName: lightGray] 
let text = NSMutableAttributableString() 
text.append("Part 1", attributes: normalAttributes) 
text.append("Part 2", attributes: lightAttributes) 

所有這些都在一個自定義的UITableViewCell類中。發生的事情是,文本使用NIB文件中的基本顏色進行渲染,而不是根據我的屬性字符串自定義前景色 - 直到我執行導致單元重用的操作(如滾動),之後突然顯示顏色正確

我似乎無法發現對象的生命週期有任何問題,並且沒有其他地方與此標籤混淆了。標籤fwiw是一個IBOutlet,所以我不會每次創建一個新的或任何奇怪的東西。

+0

「我在我的UILabel中編寫文本樣式」,但是_wherely_你運行那個代碼?上下文(和時間)就是一切。 – matt

+1

你的方便擴展正在做很多不必要的工作。它可以用'append(NSAttributedString(string:string,attributes:attributes))'代替。 –

+0

你是從主線程還是後臺線程修改標籤?讓UI更新不會真正顯示,直到您強制重新呈現爲止,這是從後臺線程觸及UI的一個標誌。 –

回答