65 votes

Comment vérifier l'existence du mode sombre dans iOS ?

  • 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 ?

130voto

Marko Points 2158

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.
    }
}

50voto

LinusGeffarth Points 8309

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 :

asset catalogues

Tiré de <a href="https://schiavo.me/2019/implementing-dark-mode/" rel="noreferrer">aquí </a>.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X