Ios 为什么';设置背景色对我的自定义UIView有明显影响吗?
当我设置Ios 为什么';设置背景色对我的自定义UIView有明显影响吗?,ios,swift,uikit,Ios,Swift,Uikit,当我设置UIView的Xib实例化子类的backgroundColor属性时,视图的背景色不会改变,而是保持在Xib中设置的颜色 复制问题 我已经创建了UIView的一个子类,我们称之为MyView,还有一个Xib,我从中实例化了它。使用Interface Builder,我已将Xib中视图的背景色设置为蓝色 我添加了一个MyView的实例作为我的应用程序主视图的子视图。正如预期的那样,它看起来是蓝色的 然后,我添加了一个outlet,myView,引用了myView的实例,以及一个按钮,其操作
UIView
的Xib实例化子类的backgroundColor
属性时,视图的背景色不会改变,而是保持在Xib中设置的颜色
复制问题
我已经创建了UIView
的一个子类,我们称之为MyView
,还有一个Xib,我从中实例化了它。使用Interface Builder,我已将Xib中视图的背景色设置为蓝色
我添加了一个MyView
的实例作为我的应用程序主视图的子视图。正如预期的那样,它看起来是蓝色的
然后,我添加了一个outlet,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
属性?您可能将nib中的视图作为子视图添加到swift文件中的自定义视图中,这就是更改backgroundColor时看不到更改的原因。您需要更改debugview子视图的背景色才能看到颜色的更改。
例如:-
self.debugView.subviews.first?.backgroundColor =
self.debugView.subviews.first?.backgroundColor == UIColor.blue
? UIColor.black : UIColor.blue
Debug View Hierarchy
如果只是查看它是否在任何其他视图后面,可能会有所帮助。@Kamran就是这样!在反序列化时,我遵循将xib的“contentView”嵌套在子类视图本身中的模式,因此我需要设置contentView的属性,而不是视图的属性本身!我觉得有点傻now@Kamran如果你愿意以某种形式回答这个问题,我很乐意把它标记为正确的。