仅更改默认 UILabel 的 UIAppearance

Posted

技术标签:

【中文标题】仅更改默认 UILabel 的 UIAppearance【英文标题】:Change UIAppearance of default UILabels only 【发布时间】:2018-01-29 14:40:34 【问题描述】:

我正在构建一个带有主题切换器的应用,我想使用 Appearance 来切换具有默认颜色(黑色 -> 白色)的 UILabel 的 textColor

我认为这是可能的,并为非默认标签创建了子类,所以我只需要定位没有子类或保持默认颜色的 UILabel。

当我使用以下内容更改外观时:

UILabel.appearance().textColor = UIColor.white

每个标签,包括子类和系统标签都变成白色,UIAppearance 覆盖了控件级别的自定义。我觉得将 UIAppearance 作为默认状态并在其上应用任何自定义是有意义的。

有没有办法使用 UIAppearance 来解决这个问题?还是我必须手动编辑我必须添加子类和自定义属性的每个标签?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

我发现解决此问题的唯一方法是将 textColor 变量设置为只读。但它有效:

UILabel.appearance().textColor = UIColor.orange

还有自定义类:

class MyLabel: UILabel 
    override var textColor: UIColor! 
        get  return UIColor.blue 
        set 
    

【讨论】:

以上是关于仅更改默认 UILabel 的 UIAppearance的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中更改 UILabel 的文本属性?

根据 UIButton 控件事件更改 UILabel

如何根据宽度有限的文本更改 UILabel 大小

如何在不更改字体本身的情况下更改 uilabel 的字体大小?

如何使用 Swift 默认 UILabel 字体和大小

UILabel 文本边距 [重复]