UIAppearance对Label文本颜色没有影响

时间:2015-12-25 22:09:08

标签: objective-c uitableview ios9 uiappearance

我使用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的背景视图

4 个答案:

答案 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];