• Comment observer l'état du mode sombre dans une application iOS • Comment réagir aux changements de l'état du mode sombre dans une application iOS
UIKit possède UITraitCollection depuis un certain temps maintenant. Depuis iOS 9, vous pouvez utiliser UITraitCollection pour voir si l'appareil prend en charge 3D Touch (une triste conversation pour un autre jour)
Dans iOS 12 , UITraitCollection a obtenu une nouvelle propriété: var userInterfaceStyle: UIUserInterfaceStyle
qui prend en charge trois cas: light
, dark
et unspecified
Puisque UIViewController hérite d'UITraitEnvironment, vous avez accès à traitCollection
de ViewController. Cela stocke userInterfaceStyle
.
UITraitEnviroment a également quelques talons de protocole astucieux qui aident votre code à interpréter lorsque des changements d'état se produisent (donc lorsqu'un utilisateur passe du côté obscur au côté clair ou vice versa). Voici un bel exemple de codage pour vous:
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.
}
}
Vous pouvez utiliser la méthode suivante pour vérifier le mode clair ou sombre dans votre projet:
switch traitCollection.userInterfaceStyle {
case .light, .unspecified:
case .dark:
}
Vous pouvez également vérifier les changements dans le style d'interface:
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
}
Tout comme dans macOS depuis Mojave, vous pouvez définir des images pour le mode clair et sombre dans votre catalogue d'actifs afin que ces images soient utilisées automatiquement:
Tiré de ici .