You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:09:01