通过情节提要命名颜色

时间:2018-11-29 15:51:18

标签: ios macos colors storyboard

对于我的MacOS应用程序,我创建了一个颜色资产目录。 我的项目的部署目标是10.11。

当我在情节提要板上设置颜色时,可以从颜色资产中进行选择。但是,当我尝试以编程方式设置一种命名的颜色时,我需要将其包装在

if #available(OSX 10.13, *) {
   view.backgroundColor = NSColor(named: "someColor")
} else {
   // Fallback on earlier versions
}

原始问题:

所以问题是为什么我没有通过情节提要选择这些颜色的警告?

我想我需要用自定义颜色替换它们,否则我的应用将在OS <10.13上崩溃,但由于部署目标,我希望情节提要不会让我选择这些颜色。

已编辑

所以问题是当我通过Storyboard使用这些颜色时会发生什么? 它会使应用程序崩溃吗?还是故事板可以处理甚至低于10.13的OS版本的命名颜色?因为我试图通过情节提要使用命名的颜色,并且将应用程序安装在OS 10.12的Mac上,所以该应用程序运行良好。所以我想知道是什么原因。

P.S 这个问题也与iOS有关,其中命名颜色的最低版本为iOS 11

2 个答案:

答案 0 :(得分:4)

不会崩溃。使用“资产目录中的颜色”,您有两个选择:

  1. 仅将其用于情节提要。
  2. 使用UIColor(named: <#String #>)就像在问题中一样。

唯一的问题是UIColor(named:)在iOS 11.0+(See documentation)中可用

因此,如果您想每次使用它,都需要考虑回退到最旧的版本,那可能并不完全正确。

但是在媒体库的Xcode中内置了另一个解决方案:

enter image description here

您可以从资产目录中拖放颜色,Xcode将为该颜色创建供您参考,该颜色也可以在iOS 10.0中使用。

用这种颜色隐藏的实际代码行是:

colorLiteral(red: 0.9411764706, green: 0.07843137255, blue: 0.07843137255, alpha: 1)

所以您可以编写一个脚本来为您生成这种颜色。

前段时间,我需要类似的解决方案,所以我写了一个脚本,对整个项目进行扫描以查找资产目录,并在其中查找颜色集并创建UIColor扩展名,其中包含资产中的所有颜色:

您可以在这里找到它:https://github.com/JakubMazur/SwiftColorsGenerator,可以通过Marathon (https://github.com/JohnSundell/Marathon)使用它

答案 1 :(得分:0)

通过使用Jakub的方法,颜色将无法用于不同的外观(亮/暗模式)。

像这样创造色彩对我有用。

extension UIColor {
    static var testColor: UIColor = {
        return UIColor(named: "TestColor", in: Bundle(for: AppDelegate.self), compatibleWith: nil)!
    }()
}