Je dois mettre à jour le style de la barre d'état sur chaque contrôleur de vue en fonction de la couleur d'arrière-plan (ce que UINavigationController
fait automatiquement).
J'ai essayé toutes les options décrites sur stackoverflow (View controller-based status bar appearance
dans info.plist
réglé surOUI), mais aucune n'a fonctionné pour moi.
J'utilise Xcode 10 beta 6 et Swift 4.2, ciblant iOS 12.
Définissez View controller-based status bar appearance
sur NO
dans info.plist
et remplacez preferredStatusBarStyle
dans chaque contrôleur de vue de la manière suivante:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Et appelez setNeedsStatusBarAppearanceUpdate()
dans votre contrôleur de vue (dans viewDidLoad()
par exemple).
Swift 4.2, iOS 12
View controller-based status bar appearance
doit maintenant être défini sur YES
dans info.plist
car UIKit ne veut plus que nous modifions le style de barre d'état via UIApplication.shared
-- Le style de barre d'état est désormais basé sur le contrôleur d'affichage.
Ensuite, si vous souhaitez que la modification soit appliquée au niveau de l'application, remplacez simplement preferredStatusBarStyle
dans le contrôleur de vue de conteneur approprié (idéalement la racine) ...
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
... et cela se propagera à tous les contrôleurs de vue. Et si vous souhaitez modifier le style de la barre d'état par contrôleur de vue, appliquez ce contrôleur de remplacement par vue.
Si le style de la barre d'état change jamais au cours de l'exécution, vous devez appeler setNeedsStatusBarAppearanceUpdate()
(de n'importe où dans le contrôleur de vue conteneur/racine ou ce contrôleur de vue spécifique), sinon ce n'est pas nécessaire.
Si View controller-based status bar appearance
dans info.plist
est défini surYESet que votre contrôleur de vue est intégré à UINavigationController
, votre contrôleur de navigation sera responsable de la mise à jour du style de barre (via navigationController.navigationBar.barStyle
) et la propriété preferredStatusBarStyle
sera ignorée.