为什么DarkMode在iOS13推出,UIUserInterfaceStyle却要求iOS12以上?
疑问解释与代码优化
为什么iOS12就有UIUserInterfaceStyle枚举
UIUserInterfaceStyle是Apple为暗黑模式功能提前预埋的API:iOS12开发阶段,Apple已经在推进暗黑模式的内部研发工作,为了后续版本功能平滑过渡、方便开发者提前做适配准备,就先在iOS12的SDK中公开了这个枚举定义。但iOS12系统本身并没有开放暗黑模式的全局开关,也没有对应的系统级样式适配,所有运行在iOS12上的App,traitCollection.userInterfaceStyle 永远不会返回 .dark 枚举值,只会返回 .unspecified 或者 .light。
现有代码的问题
你当前的代码逻辑不会触发运行异常,但存在判断冗余的问题:iOS12环境下不可能命中 .dark 分支,永远会返回false,和低于iOS12版本的降级逻辑表现完全一致,多做了一层无意义的版本判断。
优化后的正确判断逻辑
如果要准确判断「系统支持暗黑模式且当前已开启」,应该把版本判断阈值提高到iOS13.0,参考代码如下:
func isDarkMode() -> Bool { if #available(iOS 13.0, *) { return traitCollection.userInterfaceStyle == .dark } else { // iOS13以下系统不支持暗黑模式,直接返回false return false } }
内容的提问来源于stack exchange,提问作者Houman
相关产品推荐
相关产品推荐

