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

【问题讨论】:

  • Here 了解如何使用 SwiftUI。

标签: ios swift ios-darkmode


【解决方案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.
        }
    }
    
    

    【讨论】:

    猜你喜欢
    • 2020-01-12
    • 1970-01-01
    • 2022-08-09
    • 2020-02-12
    • 2020-05-15
    • 2020-01-28
    • 1970-01-01
    • 2020-03-07
    • 2020-01-19
    相关资源
    最近更新 更多