2017-09-25 77 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的一个标志。 –

回答