ios - iOS 11 和 Xcode 11 beta 上的命名颜色问题

标签 ios xcode ios13 xcode11

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

最佳答案

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

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

以下是暂时的解决方法,直到在即将发布的 Xcode 版本中修复为止。

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

    let color = UIColor(named: "myColor") ?? UIColor.black // default color for IOS 11
    
  2. Storyboard和 xib 文件的命名颜色问题,如果您在设置任何名称颜色后观察 xib 文件或 Storyboard的变化,您会注意到 namedColor xml 标记位于 资源选项卡。对于每个 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>
    

    Xcode 11 中的错误是,如果您的 MacOS 外观设置为 Dark 并且选择 light,则默认值设置为深色模式版本如果您的 MacOS 外观设置为 Light,则默认值的颜色版本。针对 iOS 11 修复此问题的解决方法。

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

关于ios - iOS 11 和 Xcode 11 beta 上的命名颜色问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57580212/

相关文章:

iOS:找不到属性 'tableView'

iOS8 不正确的 UIView.systemLayoutSizeFittingSize 值与大小类

ios - 具有两种不同颜色文本的 UILabel

ios - iOS 13 的 UIColor 新属性,如 label、secondaryLabel、tertiaryLabel 和 quaternaryLabel,这个有什么用?

ios - 文件提供程序扩展不适用于 iOS 13

ios - 如何更改模态演示ios13的背景颜色?

ios - 无法更改 UITableViewCell 中 UIImageView 的宽度和高度 - swift

ios - 尽管文件位于 Documents 目录中,但资源路径返回 nil 文件路径

iphone - WCF 服务不适用于 iPhone

ios - NSDate希伯来语日期标签