【问题标题】:Named Colors crash in Interface Builder buildsInterface Builder 构建中的命名颜色崩溃
【发布时间】:2018-11-23 21:42:48
【问题描述】:

在我正在开发的应用程序中,我们使用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

【问题讨论】:

  • 不太确定是什么导致了您的情况崩溃,我尝试创建颜色集并使用情节提要中的颜色集,并且加载正常。即使您将图像分配给情节提要中的各种 UI 组件,图像也会从资产库本身加载。如果资产库没有加载,它也应该在那里崩溃,不是吗?
  • 请分享崩溃日志
  • 我不是在询问有关崩溃的问题。当UIColor(named: "primaryColor") 被强制解包时会发生这种情况,它仅在Interface Builder 中返回nil。我的问题是如何让它在 Interface Builder 环境中返回非零颜色。
  • 我面临着完全相同的问题。一切正常,但是我所有以编程方式从 xcassets 引用命名颜色的自定义 IBDesignable xib 都没有建立在 IBInspector 上。看起来像 xcode 中的错误。

标签: ios interface-builder asset-catalog


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 2013-01-12
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 2012-06-22
    相关资源
    最近更新 更多