当我设置了Xib实例化的backgroundColor子类的UIView属性时,视图的背景颜色不会改变,而是保持在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属性?

最佳答案

您可能将笔尖视图作为子视图添加到了swift文件的customview中,这就是更改backgroundcolor的原因,而您看不到这些更改。您需要更改debugview子视图的背景颜色以查看颜色变化。
例如:-
self.debugView.subviews.first?.backgroundColor = self.debugView.subviews.first?.backgroundColor == UIColor.blue ? UIColor.black : UIColor.blue

关于ios - 为什么设置backgroundColor对我的自定义UIView没有可见效果?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51008687/

10-12 19:18