Вы можете использовать следующий код для проверки светлого или темного режима в вашем проекте:
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
}
Как и в macOS начиная с Mojave, вы можете определить изображения как для светлого, так и для темного режима в своем каталоге активов, чтобы эти изображения использовались автоматически:
Taken from here.
У UIKit уже некоторое время есть UITraitCollection. Начиная с iOS 9 вы можете использовать UITraitCollection, чтобы узнать, поддерживает ли устройство 3D Touch (грустный разговор на другой день).
В iOS 12, UITraitCollection получил новое свойство: var userInterfaceStyle: UIUserInterfaceStyle
, которое поддерживает три случая: light
, dark
и unspecified
Поскольку UIViewController наследует UITraitEnvironment, у вас есть доступ к traitCollection
ViewController. Это магазины 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.
}
}
Я думал, темный режим появился в iOS 13?
@אוריorihpt Ты прав developer.apple.com/design/human-interface-guidelines/ios/…
Да, но свойство UITraitCollection появилось в iOS 12.