Ответ 1
UIKit уже некоторое время проводит UITraitCollection. Начиная с iOS 9, вы можете использовать UITraitCollection, чтобы увидеть, поддерживает ли устройство 3D Touch (печальный разговор для другого дня)
В iOS 12 UITraitCollection получил новое свойство: var userInterfaceStyle: UIUserInterfaceStyle
, которое поддерживает три случая: light
, dark
и 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.
}
}