使用 Xcode 11 beta 的 iOS 11 上的命名颜色问题

ryk*_*boy 4 xcode ios ios13 xcode11

我正在尝试在我的 iOS 应用程序中实现暗模式。我需要使用命名颜色才能做到这一点,但我遇到了一些障碍。在明暗模式之间切换时,在 iOS 13 模拟器上一切正常,并且在 iOS 12 模拟器中颜色也正确。当我尝试在 iOS 11 模拟器上运行我的应用程序时会出现问题。我在故事板中使用的任何命名颜色默认为颜色的深色版本,当我尝试在代码中访问命名颜色时,我得到零。只是想知道是否有其他人遇到过这种情况

Bil*_*lal 5

这是 Xcode 11 和 IOS 11 中的错误。 IOS 11 中命名颜色的两个问题

  1. UIColorinit 方法在 IOS 11 中init?(named name: String)返回nil
  2. 故事板或 xib 文件中使用的命名颜色资产有时默认为深色版本。

这是暂时的解决方法,直到它在即将发布的 Xcode 版本中得到修复。

  1. 如果UIColorinit 方法init?(named name: String)返回,nil您需要为灯光模式提供后备颜色。

    let color = UIColor(named: "myColor") ?? UIColor.black // default color for IOS 11
    
    Run Code Online (Sandbox Code Playgroud)
  2. 故事板和 xib 文件的命名颜色问题,如果您在设置任何名称颜色后观察 xib 文件或故事板中的变化,您会注意到选项卡namedColor下有一个xml 标签resources。对于每个namedColor都有后备颜色,该后备颜色在 IOS 11 情况下是因为命名颜色不起作用。您甚至可以在控制台中看到警告。

     <resources>
         <namedColor name="NavigationBar">
             <color red="0.2669999897480011" green="0.70999997854232788" blue="0.046999998390674591" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
         </namedColor>
     </resources>
    
    Run Code Online (Sandbox Code Playgroud)

    错误在Xcode 11,如果你的设置为暗模式版本的缺省值MacOS外观设置为Dark它挑选light,如果你的颜色版本的默认值MacOS外观设置为Light。针对 IOS 11 解决此问题的解决方法。

    1. 您可以将MacOS外观设置为Light。之后,您需要打开项目中的每个故事板或 xib 文件一次。打开它后,编辑器将自动选择Light您的颜色版本,您可以在源代码管理中看到该文件已被修改,默认值将是Light您的颜色资产的版本。请注意,每次更改颜色资产中的任何值时,您都必须对使用该命名颜色的所有 xib 文件再次执行此操作。
    2. 其次,编写一个脚本来解析项目的所有 xib 和故事板文件并更新默认 RGBA 值,这有点复杂。