【问题标题】:Named colors via storyboard通过故事板命名颜色
【发布时间】:2018-11-29 15:51:17
【问题描述】:

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

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

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

原始问题:

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

我想我需要用自定义颜色替换它们,否则我的应用将在操作系统

已编辑:

所以问题是当我通过 Storyboard 使用这些颜色时会发生什么? 它会使应用程序崩溃吗?或者即使对于

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

【问题讨论】:

  • 您的应用真的会在
  • 您是否查看了构建中的警告?一般来说,您可以在 Interface Builder 中部署目标之前使用功能,然后在构建时收到警告...
  • 尚未在版本
  • 我没有收到任何警告 - 因此问题..因为我没有收到任何警告,我认为这个功能有可能通过故事板工作..但我猜它不会

标签: ios macos colors storyboard


【解决方案1】:

不会让您的应用崩溃。使用 Assets Catalog 中的颜色,您有两种选择:

  1. 只能与情节提要一起使用。
  2. 使用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) 使用它

【讨论】:

  • 谢谢,很棒的信息!但至于我的问题 - 我问了两个部分 - 一个关于代码,你在这里回答的 UIColor(named:) ,另一部分是关于情节提要 - 我 确实 使用 Assets Catalog 中的颜色在故事板上。看起来没问题,我没有收到任何警告,但我不确定为什么.. 那么它是否适用于安装在 iOS
  • 是的,这样用也没问题。当您从情节提要中选择它们时,这些颜色将被 XML 文件中的 RGB 值替换(最终情节提要只是 XML 文件)。因此,即使在 iOS 10 中,您也可以安全地使用它。
  • 我知道,在作为 XML 的情节提要中,它似乎类似于这个 所以我想确保没问题..
【解决方案2】:

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

创建这样的颜色对我有用。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-22
    • 2015-04-06
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多