web-dev-qa-db-fra.com

Détection du changement de mode sombre iOS

J'ai lu la documentation concernant: https://developer.Apple.com/documentation/appkit/supporting_dark_mode_in_your_interface

Lorsque l'utilisateur modifie l'apparence du système, le système demande automatiquement à chaque fenêtre et vue de se redessiner. Au cours de ce processus, le système appelle plusieurs méthodes bien connues pour macOS et iOS, répertoriées dans le tableau suivant, pour mettre à jour votre contenu.

Dans notre application héritée, nous créons nos vues en tant que variables paresseuses dans l'init de chaque classe. Cela signifie que les vues ne seront pas dessinées avec la bonne couleur si l'utilisateur passe dans les paramètres et passe en mode sombre.

Si vous apportez des modifications sensibles à l'apparence en dehors de ces méthodes, votre application risque de ne pas dessiner correctement son contenu pour l'environnement actuel. La solution consiste à déplacer votre code dans ces méthodes.

Notre application est assez grande et un remaniement sera fait pour mieux prendre en charge cela à l'avenir, mais je me demande s'il existe un moyen de détecter ces changements avec le centre de notification, comme ce qui peut être fait pour Mac OS:

Comment détecter le basculement entre le mode par défaut et le mode sombre de macOS en utilisant Swift

17
andromedainiative

Version Objective-C:

if (@available(iOS 12.0, *)) {

    if( self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark ){
       //is dark
    }else{
        //is light

    }
}
0
Zouhair Sassi

J'ai fini par déplacer toute ma configuration de couleur vers la fonction layoutSubviews () dans toutes les vues et le viewDidLayoutSubviews () dans les contrôleurs de vue.

0
andromedainiative

Remplacez simplement la méthode iOS 13 pour détecter le changement de mode de lumière sombre Swift 5

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)

        if #available(iOS 13.0, *) {
            if self.traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
                if traitCollection.userInterfaceStyle == .dark {
                    //Dark
                }
                else {
                    //Light
                }
            }
        } else {
            // Fallback on earlier versions
        }
    }
0
Hardik Thakkar