【发布时间】:2018-06-24 09:40:58
【问题描述】:
当我设置 UIView 的 Xib 实例化子类的 backgroundColor 属性时,视图的背景颜色不会改变,而是保持 Xib 中设置的颜色。
重现问题
我创建了一个UIView 的子类,我们称之为MyView,以及我从中实例化它的Xib。使用 Interface Builder,我已将 Xib 中视图的背景颜色设置为蓝色。
我添加了一个MyView 的实例作为我的应用程序主视图的子视图。正如预期的那样,它显示为蓝色。
然后,我添加了一个插座 myView,引用了 MyView 的实例,以及一个按钮,其操作尝试更改视图的背景颜色,如下所示:
@IBOutlet weak var debugView: MyView!
@IBAction func debug(_ sender: Any) {
myView.backgroundColor = UIColor.green
}
我预计myView 的背景颜色会变为绿色;相反,它像以前一样保持蓝色。
观察
奇怪的是,如果我在调试器中检查视图的背景颜色,似乎该属性已按预期设置为绿色,即使更改不可见:
(lldb) p debugView.backgroundColor == UIColor.blue
(Bool) $R1 = false
(lldb) p debugView.backgroundColor == UIColor.green
(Bool) $R2 = true
我也尝试过使用setNeedsDisplay() 强制视图重绘,但没有效果。
为什么我的自定义视图的外观没有反映其backgroundColor 属性?
【问题讨论】:
-
Debug View Hierarchy可能有助于查看它是否位于任何其他视图后面。 -
@Kamran 就是这样!我在反序列化时遵循将 xib 的“contentView”嵌套在子类视图本身中的模式,因此我需要设置 contentView 的属性,而不是视图的属性本身!我现在觉得有点傻
-
@Kamran 如果您愿意以某种形式将其作为答案,我很乐意将其标记为正确。