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

时间:2018-06-14 07:31:17

标签: ios interface-builder asset-catalog

在我正在处理的应用中,我们使用named colors来管理我们的颜色方案,我们在代码中使用它,如下所示:

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

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

我们现在考虑一些避免强制解包的变通方法,但实际上我们希望资产目录能够像其他地方一样简单地加载到Interface Builder构建中。

有没有办法做到这一点?

修改

为了澄清,通过Interface Builder中的UI设置颜色很好。当我们在这样的代码中设置崩溃时会发生崩溃:

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

编辑2:

我提交了一个雷达:rdar:// 41244137

1 个答案:

答案 0 :(得分:1)

当我使用Bundle(for: AppDelegate.self)而不是默认包(Bundle.main)时,命名颜色在Interface Builder中工作正常:

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