J'essaie de changer la couleur de la barre d'état dans mon application Swift en blanc, mais je me heurte à un mur de briques. J'ai 3 ViewControllers qui sont chacun incorporés dans un NavigationController (cela pourrait-il être le problème? J'ai déjà essayé de placer le code dans la classe NavigationController.) J'ai essayé les deux morceaux de code suivants dans le didFinishLaunchingWithOptions de mon AppDelegate Fichier .Sift, mais ni a travaillé.
application.statusBarStyle = .LightContent
et
UIApplication.sharedApplication().statusBarStyle = .LightContent
Tout ce que les Docs ont à dire à ce sujet, c’est que UIBarButtonStyle est un Int et m’a donné cet extrait d’énumération qui ne m’a pas du tout aidé à l’implémentation.
enum UIStatusBarStyle : Int {
case Default
case LightContent
case BlackOpaque
}
Qu'est-ce que je rate?
Vous avez deux options.
Si vous souhaitez continuer à définir manuellement le style de la barre d'état, continuez à travailler, mais vous devrez ajouter la clé suivante à votre fichier info.plist avec la valeur NO
.
Afficher l'apparence de la barre d'état basée sur le contrôleur
Ou, si vous souhaitez continuer à utiliser l'apparence de la barre d'état basée sur le contrôleur de vue, au lieu de définir le statusBarStyle de l'application, remplacez la propriété preferredStatusBarStyle
de chaque contrôleur de vue pour lequel vous souhaitez spécifier un style de barre d'état.
Swift
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Swift 2
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
Swift 3.
dans AppDelegate.Swift didFinishLunchingWithOptions
UIApplication.shared.statusBarStyle = .lightContent
Info.plist
View controller-based status bar appearance -> NO
Swift 2.2
dans AppDelegate.Swift didFinishLunchingWithOptions
UIApplication.sharedApplication().statusBarStyle = .LightContent
Info.plist
View controller-based status bar appearance -> NO
Vous devez définir le:
navigationController.navigationBar.barStyle = .black
et le texte apparaîtra en blanc
Pour iOS9.x et Xcode7, insérez simplement ceci dans AppDelegate.Swift
:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
UINavigationBar.appearance().barStyle = .Black
}
Ceci transformera automatiquement le style de votre barre d'état en .Lightcontent
Pour tous les contrôleurs de vue à l'intérieur d'un UINavigationController.
(En outre, supprimez View controller-based status bar appearance
De Info.plist pour supprimer les avertissements que vous voyez probablement aussi!)
Dans Swift 3, le style de la barre d'état a été remplacé par une propriété calculée dans UIViewController que vous pouvez remplacer comme ceci:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent //or default
}
Sur iOS 9, le texte suivant (setStatusBarStyle) est obsolète et vous recevrez un avertissement si vous suivez ce chemin.
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
Si vous voulez que tous les statusBars soient modifiés en une seule fois, essayez d’ajouter ce qui suit à votre Info.plist. Cela rendra également la barre d'état de votre écran de lancement blanche. Alors que le code ci-dessus ne sera pas.
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
pour moi tout ça ne marche pas avant que j'ajoute:
self.navigationController?.navigationBar.barStyle = .black;
alors:
UIViewControllerBasedStatusBarAppearance
sur YES
dans .plist
viewDidLoad
appelez self.setNeedsStatusBarAppearanceUpdate();
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
navigationBar.barStyle
So finaloverride var preferredStatusBarStyle: UIStatusBarStyle { self.navigationController?.navigationBar.barStyle = .black;//or default return .lightContent //or default }
et si cela ne fonctionne pas, vous pouvez essayer d’ajouter un UINavigationController
extension
:
extension UINavigationController
{
override open var preferredStatusBarStyle: UIStatusBarStyle {
if let lastVC = self.viewControllers.last
{
return lastVC.preferredStatusBarStyle
}
return .default
}
}
Étrange, en utilisant Swift 3.1 & XC8.2.1, mais tout ce qui précède n'a pas fonctionné.
Ce que j'ai fait, c'est juste
extension UINavigationController
{
override open var preferredStatusBarStyle: UIStatusBarStyle {
get {
return .lightContent
}
}
}
Pas de Plist, pas d'autres trucs. HTH
Dans Swift 3.0, vous pouvez remplacer un getter dans l'apparence de la barre d'état de ViewController for View:
override var preferredStatusBarStyle: UIStatusBarStyle {
get { return .lightContent }
}
Étape 1. Ajoutez à info.plist View controller-based status bar appearance -> NO
Étape 2. Ajoutez le code dans la méthode où vous devez changer la couleur de la barre d'état:
UIApplication.shared.statusBarStyle = .lightContent //(or .default)
setNeedsStatusBarAppearanceUpdate()
Ligne de code clé: setNeedsStatusBarAppearanceUpdate()
Ne modifiez pas votre Info.plist. Ajoutez ceci à votre ViewController.Swift:
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}