如何在 iOS 中检查暗模式?

  • 如何在 iOS 应用程序中观察暗模式状态
  • 在 iOS 应用程序中如何应对黑暗模式状态的变化
64077 次浏览

您可以使用下面的代码来检查项目中的亮度或暗度模式:

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 中一样,你可以在你的资产目录中定义明暗模式的图片,这样这些图片就会被自动使用:

asset catalogues

取自 给你

UIKit 拥有 UITraitCollection 已经有一段时间了。由于 iOS9,你可以使用 UITraitCollection 来查看设备是否支持3D 触摸(这是另一个悲伤的对话)

在 iOS 12 中,UITraitCollection 获得了一个新的特性: var userInterfaceStyle: UIUserInterfaceStyle,它支持三种情况: lightdarkunspecified

因为 UIViewController 继承了 UITraitEnvironment,所以您可以访问 ViewController 的 traitCollection

UITraitEnvironment 还有一些漂亮的协议存根,可以帮助您的代码在状态发生变化时进行解释(所以当用户从黑暗面切换到光明面或者反之亦然)。下面是一个很好的编码示例:

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