web-dev-qa-db-fra.com

Comment vérifier le mode sombre iOS?

• 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

42
Marko

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

86
Marko

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:

asset catalogues

Tiré de ici .

21
LinusGeffarth