web-dev-qa-db-fra.com

Comment changer le style de la barre d'état - iOS 12

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.

8
Tomáš Pánik

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

15
Carpsen90

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.

18
bsod

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.

4
swearwolf