繁体   English   中英

为什么设置 backgroundColor 对我的自定义 UIView 没有可见效果?

[英]Why doesn't setting backgroundColor have a visible effect on my custom UIView?

当我设置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属性?

您可能在 swift 文件中将 nib 的视图作为子视图添加到您的自定义视图,这就是更改背景颜色的原因,您将看不到更改。 您需要更改调试视图子视图的背景颜色以查看颜色变化。 例如:-

self.debugView.subviews.first?.backgroundColor = 
    self.debugView.subviews.first?.backgroundColor == UIColor.blue
        ? UIColor.black : UIColor.blue

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM