- Comment observer l'état du mode sombre dans une application iOS ?
- Comment réagir aux changements d'état du mode sombre dans une application iOS ?
Réponses
Trop de publicités?UIKit dispose de UITraitCollection depuis un certain temps déjà. Depuis iOS 9, vous pouvez utiliser UITraitCollection pour savoir si l'appareil supporte 3D Touch (une triste conversation pour un autre jour).
Dans iOS 12 , UITraitCollection a une nouvelle propriété : var userInterfaceStyle: UIUserInterfaceStyle
qui prend en charge trois cas : light
, dark
y unspecified
Puisque UIViewController hérite de UITraitEnvironment, vous avez accès à l'environnement du ViewController. traitCollection
. Ce magasin userInterfaceStyle
.
UITraitEnviroment dispose également de quelques stubs de protocole astucieux qui aident votre code à interpréter les changements d'état (par exemple, lorsqu'un utilisateur passe du côté obscur au côté lumineux 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 le code suivant pour vérifier le mode clair ou foncé dans votre projet :
func viewDidLoad() {
super.viewDidLoad()
switch traitCollection.userInterfaceStyle {
case .light, .unspecified:
// light mode detected
case .dark:
// dark mode detected
}
}
Vous pouvez également vérifier si le style de l'interface a été modifié :
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 le mode foncé dans votre catalogue d'actifs afin que ces images soient utilisées automatiquement :
Tiré de <a href="https://schiavo.me/2019/implementing-dark-mode/" rel="noreferrer">aquí </a>.