如何在 iOS 中检查暗模式? [复制]

Posted

技术标签:

【中文标题】如何在 iOS 中检查暗模式? [复制]【英文标题】:How to check for Dark Mode in iOS? [duplicate] 【发布时间】:2019-10-20 18:45:22 【问题描述】: 如何在 ios 应用中观察暗模式状态 如何对 iOS 应用中暗模式状态的变化做出反应

【问题讨论】:

Here 了解如何使用 SwiftUI。 【参考方案1】:

您可以使用以下代码检查项目中的明暗模式:

func viewDidLoad() 
    super.viewDidLoad()

    switch traitCollection.userInterfaceStyle 
        case .light, .unspecified:
            // light mode detected
        case .dark:
            // dark mode detected
    

您还可以检查界面样式的变化:

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) 
    super.traitCollectionDidChange(previousTraitCollection)

    let userInterfaceStyle = traitCollection.userInterfaceStyle // Either .unspecified, .light, or .dark
    // Update your user interface based on the appearance

就像自 Mojave 以来在 macOS 中一样,您可以在资产目录中为明暗模式定义图像,以便自动使用这些图像:

取自here。

【讨论】:

【参考方案2】:

UIKit 已经有一段时间了。从 iOS 9 开始,您可以使用 UITraitCollection 来查看设备是否支持 3D Touch(又是一个悲伤的对话)

In iOS 12,UITraitCollection 获得了一个新属性:var userInterfaceStyle: UIUserInterfaceStyle,它支持三种情况:lightdarkunspecified

由于 UIViewController 继承了 UITraitEnvironment,因此您可以访问 ViewController 的traitCollection。这个存储userInterfaceStyle

UITraitEnviroment 也有一些漂亮的协议存根,可以帮助您的代码解释何时发生状态更改(因此当用户从黑暗面切换到光明面时,反之亦然)。这是一个很好的编码示例:

class MyViewController: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()

        if self.traitCollection.userInterfaceStyle == .dark 
            // User Interface is Dark
         else 
            // User Interface is Light
        

    


    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) 
        // Trait collection has already changed
    

    override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) 
        // Trait collection will change. Use this one so you know what the state is changing to.
    


【讨论】:

我以为 iOS 13 中引入了深色模式? @אוריorihpt 你是对的developer.apple.com/design/human-interface-guidelines/ios/… 是的,但UITraitCollection 属性是在iOS 12 中引入的

以上是关于如何在 iOS 中检查暗模式? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在模拟器 iOS 12.4 中使用暗模式?

如何在 iOS Xcode Swift Playground 上模拟暗模式

如何在 React Native 中强制禁用 iOS 暗模式

如何检查 iOS/iPadOS 中是不是启用了深色模式?

如何防止 iOS 13 暗模式破坏电子邮件

React Native - Expo - 如何检查是不是启用了暗模式?