代码之家  ›  专栏  ›  技术社区  ›  Witterquick

通过故事板命名颜色

  •  3
  • Witterquick  · 技术社区  · 7 年前

    我的项目的部署目标是10.11。

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

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

    原始问题:

    所以问题是为什么我在通过故事板选择这些颜色时没有收到任何警告?

    编辑:

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

    这个问题也与iOS有关,其中命名颜色的最小版本是iOS 11

    1 回复  |  直到 7 年前
        1
  •  5
  •   Jakub Streetboy    7 年前

    会的 崩溃你的应用程序。使用“资源目录”中的颜色,您有两个选项:

    1. 使用 UIColor(named: <#String #>)

    UIColor(named:) 在iOS 11.0+中提供( See documentation

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

    enter image description here

    此颜色中隐藏的实际代码行为:

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

    不久前,我需要类似的解决方案,所以我写了一个脚本,扫描我的整个项目的资产目录,并在其中找到一个颜色集和创建 UIColor 包含资源中所有颜色的扩展名:

    你可以在这里找到它: https://github.com/JakubMazur/SwiftColorsGenerator Marathon (https://github.com/JohnSundell/Marathon)

        2
  •  0
  •   Lal Krishna    5 年前

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

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