我使用UIAppearance
设置应用中所有标签的文字颜色。但文字颜色不会改变。
以下是我如何创建标签的示例
//show the loading message
MessageLabel *messageLabel = [[MessageLabel alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
messageLabel.text = @"\n\nLoading ...\n\n";
messageLabel.numberOfLines = 0;
messageLabel.textAlignment = NSTextAlignmentCenter;
[messageLabel sizeToFit];
self.tableview.backgroundView = messageLabel;
以下是我设置文字颜色的方法
[[MessageLabel appearance] setTextColor:[UIColor blackColor]];
需要注意的是,所有这些MessageLabel
都是UITableView的背景视图
答案 0 :(得分:1)
正如arrteme所述,UILabel的textColor与UIAppearance不兼容。我通过添加一个仅包装textColor的UIAppearance兼容属性来解决此问题。在Swift中,这看起来像
class MessageLabel: UILabel {
@objc dynamic var configurableTextColor: UIColor {
get {
return textColor
}
set {
textColor = newValue
}
}
...
}
然后配置外观:
MessageLabel.appearance().configurableTextColor = .black
答案 1 :(得分:0)
来自文档:
当视图进入窗口时,iOS会应用外观更改 不会更改已在窗口中的视图的外观。至 更改当前在窗口中的视图的外观,删除 视图层次结构中的视图然后将其放回。
答案 2 :(得分:0)
参考this,UIAppearance似乎与UILabel无关......
由于你是UILabel的子类,也许在你的 MessageLabel 类中设置textcolor
属性initWithFrame:
方法是有意义的吗?
或者另一种选择,因为你说这些 MessageLabel 实例用于UITableViewCell的背景,也许将标签的背景清晰并改变单元格本身的背景是有意义的,例如在{{1}中tableView的委托中的方法?
答案 3 :(得分:0)
如果您在代码中实例化了UILabel,则必须在设置外观后手动设置textColor
属性。
messageLabel.textColor = [[UILabel appearance] textColor];