我有一个xib。我有一个加载 xib 并将其添加到其子视图的视图控制器。xib 具有从 xib 文件(从界面)到资产(由我创建)的自定义颜色集设置的背景颜色。一切正常。
现在,在我的视图控制器中,在 viewDidLoad 中,我想用其他东西覆盖该背景颜色。我发现并 100% 复制的问题是覆盖不会做任何事情,除非我在 viewDidAppear 中做。
所以总结...
从 xib 设置的自定义颜色背景...在 viewDidLoad 中覆盖不起作用,在 viewDidAppear 中覆盖工作
从 xib 设置的Xcode默认颜色背景(除资产自定义颜色之外的任何其他颜色)...在 viewDidLoad WORKS 中覆盖...
为什么在第一种情况下我不能覆盖颜色而在第二种情况下我可以?
是否有我在这里缺少的隐藏功能?如果从 xib 设置的颜色是自定义颜色,则您根本无法覆盖 viewDidLoad 中的视图背景颜色,但如果它是任何其他颜色......例如白色、红色、黑色或 w/e Xcode 已经让一切按预期工作。
如果它有任何影响......我正在谈论的这个视图控制器被推送到导航堆栈上。但我看不出这会产生什么影响。
要复制这个...创建一个新的示例项目...其中只有一个视图控制器。接下来通过资产 -> 新颜色集添加自定义颜色。将视图控制器视图背景颜色从故事板设置为新添加的颜色集。然后在 viewDidLoad 中将视图的背景颜色更改为其他颜色...您会注意到,如果您运行该应用程序,它不会更改,如果在故事板中有一个自定义颜色设置为背景。
不知何故,从故事板覆盖设置的背景自定义颜色发生在 viewDidLoad 之后和 viewDidAppear 之前的幕后。
我来晚了,但为未来的读者提供了更多信息。我刚刚在我的 iOS 11 和 iOS 12 应用程序中遇到了这个错误。从 iOS 13.0 开始,Apple 解决了这个错误。因此,如果您支持以前的版本,您仍然需要应用@AlanS 的解决方法,或者不在 storyboard 和 xib 中使用自定义颜色:
func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
if #available(iOS 13.0, *) {
// Fix iOS 12 storyboard color bug.
} else {
view.backgroundColor = UIColor.black
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2847 次 |
| 最近记录: |