如何检查iOS暗模式?

Mar*_*rko 26 ios swift ios-darkmode

•如何在iOS应用中观察黑暗模式状态•如何对iOS应用中的黑暗模式状态做出反应

Mar*_*rko 57

UIKit已经拥有UITraitCollection已有一段时间了。从iOS 9开始,您可以使用UITraitCollection来查看设备是否支持3D Touch(另一天令人难过的谈话)

在iOS系统12,UITraitCollection得到了一个新的特性:var userInterfaceStyle: UIUserInterfaceStyle它支持三种情况:lightdark,和unspecified

由于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.
    }
}

Run Code Online (Sandbox Code Playgroud)


Lin*_*rth 11

您可以使用以下方法检查项目中的亮模式或暗模式:

switch traitCollection.userInterfaceStyle {
    case .light, .unspecified:
    case .dark:
}
Run Code Online (Sandbox Code Playgroud)

您还可以检查界面样式的更改:

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
}
Run Code Online (Sandbox Code Playgroud)

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

资产目录

取自这里