命名颜色在 Interface Builder 构建中崩溃
Named Colors crash in Interface Builder builds
在我正在开发的应用程序中,我们使用 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
当我使用 Bundle(for: AppDelegate.self)
而不是默认包 (Bundle.main
) 时,命名颜色在 Interface Builder 中工作正常:
UIColor(named: "primaryColor", in: Bundle(for: AppDelegate.self), compatibleWith: nil)
在我正在开发的应用程序中,我们使用 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
当我使用 Bundle(for: AppDelegate.self)
而不是默认包 (Bundle.main
) 时,命名颜色在 Interface Builder 中工作正常:
UIColor(named: "primaryColor", in: Bundle(for: AppDelegate.self), compatibleWith: nil)