在我正在处理的应用中,我们使用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
答案 0 :(得分:1)
当我使用Bundle(for: AppDelegate.self)
而不是默认包(Bundle.main
)时,命名颜色在Interface Builder中工作正常:
UIColor(named: "primaryColor", in: Bundle(for: AppDelegate.self), compatibleWith: nil)