为啥设置 backgroundColor 对我的自定义 UIView 没有明显影响?
Posted
技术标签:
【中文标题】为啥设置 backgroundColor 对我的自定义 UIView 没有明显影响?【英文标题】:Why doesn't setting backgroundColor have a visible effect on my custom UIView?为什么设置 backgroundColor 对我的自定义 UIView 没有明显影响? 【发布时间】: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 如果您愿意以某种形式将其作为答案,我很乐意将其标记为正确。
【参考方案1】:
您可能将 nib 中的视图作为子视图添加到 swift 文件中的自定义视图,这就是更改背景颜色的原因,您将看不到更改。您需要更改调试视图的子视图的背景颜色才能看到颜色变化。 例如:-
self.debugView.subviews.first?.backgroundColor =
self.debugView.subviews.first?.backgroundColor == UIColor.blue
? UIColor.black : UIColor.blue
【讨论】:
以上是关于为啥设置 backgroundColor 对我的自定义 UIView 没有明显影响?的主要内容,如果未能解决你的问题,请参考以下文章
使用epplus c#设置Excel工作表单元格的自定义BackgroundColor
为啥在 fullcalendar 事件上设置 backgroundColor 只是更改点颜色而不是设置背景颜色?
为啥 CMake 没有与我的自定义库(add_library/set_property)链接?