对于我的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
答案 0 :(得分:4)
不会崩溃。使用“资产目录中的颜色”,您有两个选择:
UIColor(named: <#String #>)
就像在问题中一样。唯一的问题是UIColor(named:)
在iOS 11.0+(See documentation)中可用
因此,如果您想每次使用它,都需要考虑回退到最旧的版本,那可能并不完全正确。
但是在媒体库的Xcode中内置了另一个解决方案:
您可以从资产目录中拖放颜色,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)!
}()
}