Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么';设置背景色对我的自定义UIView有明显影响吗?_Ios_Swift_Uikit - Fatal编程技术网

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如果你愿意以某种形式回答这个问题,我很乐意把它标记为正确的。