【发布时间】:2019-05-02 21:39:18
【问题描述】:
我在我的应用委托中设置了 UILabel 外观:
UILabel.appearance().textColor = UIColor.white
我还有一个自定义 UIView 子类,它包含一个 UILabel 以及一些其他元素(此处省略):
@IBDesignable
class CustomView: UIView {
private let descriptionLabel = HCLabel()
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override func awakeFromNib() {
super.awakeFromNib()
self.setup()
}
private func setup() {
self.descriptionLabel.textColor = UIColor.black
// ... other things not related to descriptionLabel
}
}
如果我在情节提要中实例化 CustomView,一切正常。但是,如果我在代码中实例化它,descriptionLabel 是白色(外观颜色),而不是黑色(我设置的颜色)。这里发生了什么?我的理解是,如果我设置了自定义颜色,就不会使用外观颜色。
【问题讨论】:
-
你确认
setup确实被调用了吗? -
是的,它被调用并且 UILabel 的颜色发生了变化,但显然稍后又被改回了
-
我编辑了问题以修复错误 -
CustomView没有使用情节提要实例化,而是以编程方式实例化。 -
实现
didMoveToSuperview并在那里调用设置。 -
这确实有效,但您能解释一下原因吗?我知道 UIAppearance 属性是在视图移动到超级视图/窗口时设置的,但我也认为设置自定义值会阻止这种情况发生。我不认为该项目的另一个开发人员会在 6 个月后以类似的方式使用 UILabel,他/她将能够弄清楚为什么设置 textColor 根本没有效果......
标签: swift uilabel interface-builder uiappearance ibdesignable