命名颜色在Interface Builder构建中崩溃

7

在我正在开发的应用程序中,我们使用命名颜色来管理我们的颜色方案,我们在代码中这样使用:

extension UIColor {
    static let primaryColor = UIColor(named: "primaryColor")!
}

这在大多数情况下都可以正常工作,但是当我们将其用作自定义视图中某个地方的默认值时,在Interface Builder中加载该视图时会出现问题,因为包含颜色的资源目录无法在Interface Builder构建中加载。

我们现在考虑了一些解决方法来避免强制展开,但实际上我们希望像其他地方一样,在Interface Builder构建中简单地加载资源目录。

有没有什么办法可以做到这一点?

编辑:

澄清一下,当通过UI在Interface Builder中设置颜色时,这些颜色没有问题。 当我们像这样在代码中设置颜色时,就会出现崩溃:

class CustomView: UIView {
    init() {
        self.backgroundColor = .primaryColor
    }
}

编辑2:

我已提交一个反馈:rdar://41244137


我不太确定是什么原因导致了你的崩溃,但我尝试创建了一个颜色集并在Storyboard中使用它,它可以正常加载。即使您在Storyboard中为各种UI组件分配图像,图像也将从资源库本身加载。如果资源库未加载,那么它也应该在那里崩溃,不是吗? - Sandeep Bhandari
请分享崩溃日志。 - Vinodh
2
我不是在问崩溃的问题。当强制解包UIColor(named: "primaryColor")时,它会返回nil,但仅在Interface Builder中发生。我的问题是如何在Interface Builder环境中获取非空颜色。 - Xavier Lowmiller
我遇到了完全相同的问题。一切都很顺利,但是所有引用xcassets中命名颜色的自定义IBDesignable xib在IBInspector上编译失败。看起来是Xcode内部存在错误。 - Cauê Jannini
1个回答

5

当我使用Bundle(for: AppDelegate.self)代替默认的bundle(Bundle.main)时,在Interface Builder中使用命名颜色是有效的:

UIColor(named: "primaryColor", in: Bundle(for: AppDelegate.self), compatibleWith: nil)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接