我正在尝试在我的 iOS 应用程序中实现深色模式。我需要使用命名颜色才能做到这一点,但我遇到了一些障碍。在浅色和深色模式之间切换时,在 iOS 13 模拟器上一切正常,并且在 iOS 12 模拟器中颜色也正确。当我尝试在 iOS 11 模拟器上运行我的应用程序时,会出现此问题。我在 Storyboard中使用的任何命名颜色都默认为颜色的深色版本,当我尝试在代码中访问命名颜色时,我得到零。只是想知道是否还有其他人遇到过这个
最佳答案
这是 Xcode 11 和 IOS 11 中的错误。IOS 11 中命名颜色的两个问题
UIColor
init 方法init?(named name: String)
在 IOS 11 中返回nil
- Storyboard或 xib 文件中使用的命名颜色资源有时默认为深色版本。
以下是暂时的解决方法,直到在即将发布的 Xcode 版本中修复为止。
如果
UIColor
init 方法init?(named name: String)
返回nil
您需要为灯光模式提供后备颜色。let color = UIColor(named: "myColor") ?? UIColor.black // default color for IOS 11
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 修复此问题的解决方法。- 您可以将
MacOS
外观设置为浅色
。之后,您需要打开项目中的每个 Storyboard或 xib 文件一次。打开它后,编辑器将自动选择颜色的Light
版本,您可以在源代码管理中看到文件已修改,默认值将是颜色的Light
版本颜色 Assets 。请注意,每次更改颜色资源中的任何值时,都必须对使用该命名颜色的所有 xib 文件再次执行此操作。 - 第二个有点复杂,您需要编写一个脚本来解析项目的所有 xib 和 Storyboard 文件并更新默认 RGBA 值。
- 您可以将
关于ios - iOS 11 和 Xcode 11 beta 上的命名颜色问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57580212/