ios - 如果我使用来自 xib 的自定义颜色,为什么 iOS 不会覆盖背景颜色?

标签 ios swift xcode

我有一个xib。我有一个 View Controller ,它加载 xib 并将其添加到它的 subview 中。 xib 的背景颜色从 xib 文件(来自界面)设置为 定制颜色套装来自 Assets (由我创建)。
一切正常。
现在,在我的 View Controller 中,在 viewDidLoad 中,我想用其他东西覆盖该背景颜色。我发现并且它 100% 复制的问题是覆盖不会做任何事情,除非我在 viewDidAppear 中这样做。
所以总结...

  • 自定义颜色 从 xib 设置的背景...覆盖 viewDidLoad 不工作 ,覆盖 viewDidAppear 工作
  • Xcode 默认颜色 从 xib 设置的背景(除 Assets 自定义颜色外的任何其他颜色)...覆盖 viewDidLoad 作品 ...

  • 为什么在第一种情况下我不能覆盖颜色而在第二种情况下我可以?
    我在这里缺少一个隐藏的功能吗?如果从 xib 设置的颜色是自定义颜色,则您根本无法在 viewDidLoad 中覆盖 View 背景颜色,但如果它是任何其他颜色......如白色、红色、黑色或 w/e Xcode 已经按预期工作。
    如果它有任何影响......我正在谈论的这个 View Controller 被推送到导航堆栈上。但我看不出这会产生什么影响。

    复制步骤:
    要复制它...创建一个新的示例项目...其中只有一个 View Controller 。接下来通过 assets -> new color set 添加自定义颜色。将 View Controller View 背景颜色从 Storyboard 设置为新添加的颜色集。然后在 viewDidLoad 内部将 View 的背景颜色更改为其他颜色......您会注意到,如果您运行应用程序,如果在 Storyboard 中有自定义颜色设置为背景,它不会改变。
    不知何故, Storyboard覆盖的背景自定义颜色集在 viewDidLoad 之后和 viewDidAppear 之前发生在幕后。

    最佳答案

    我来晚了,但为 future 的读者提供了更多信息。
    我刚刚在我的 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
        }
    }
    

    关于ios - 如果我使用来自 xib 的自定义颜色,为什么 iOS 不会覆盖背景颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58007005/

    相关文章:

    ios - 快速读取 JSON 解析到 NSArray 时出现段错误

    objective-c - 使用完成按钮以编程方式添加 UINavigationBar

    ios - 如何使用 cordova 1.5 和 xcode 4.2 创建 "Hello World"iPhone 应用程序?

    iphone - 按大小压缩图像 - iPhone SDK

    ios - 动态单元格高度尺寸不起作用

    ios - 如何在动态 TableView 内容中添加静态数据。并进行计算

    ios - 调用目录分机的来电显示中的 UserDefaults

    iphone - iAd 在 iPad 上不工作

    objective-c - 不涉及 cocos2d 的 Chipmunk/Box2D 教程

    ios - 使用 PFFile 管理子类 PFUser 的个人资料图片 - Swift/iOS