UIKit拥有UITraitCollection已经有一段时间了.从iOS 9开始,你可以使用UITraitCollection来查看该设备是否支持3D Touch(另一天的悲伤对话)
In iOS 12,UITraitCollection获得了一个新属性:var userInterfaceStyle: UIUserInterfaceStyle
,它支持三种情况:light
、dark
和unspecified
由于UIViewController继承了UITraitenEnvironment,因此您可以访问ViewController的traitCollection
.这是userInterfaceStyle
store .
UITraitEnviroment还有一些漂亮的协议存根,可以帮助代码在状态发生变化时进行解释(因此当用户从黑暗面切换到Illuminate 面或反之亦然).下面是一个很好的编码示例:
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.
}
}