43 votes

Définition de statusbarStyle (obsolète dans iOS 9.0)

Il suffit de télécharger la nouvelle xCode 10.0, et a vu que l'ancien statusBarStyle a été abandonné depuis iOS 9.0.

Avertissement: Setter for 'statusBarStyle' was deprecated in iOS 9.0: Use -[UIViewController preferredStatusBarStyle]

Obsolète code: UIApplication.shared.statusBarStyle = .default

J'ai essayé d'utiliser self.preferredStatusBarStyle, mais de trouver la propriété est à seulement un getter. Si quelqu'un sait comment régler le statusBarStyle?


Modifier

Je veux changer le statusBarStyle l'intérieur d'une fonction, où un utilisateur peut basculer entre les différents thèmes. Par exemple:

func changeStatusBar(toDarkMode: Bool) {
    if toDarkMode {
        // Set to light statusBarStyle
    } else { 
        // Set to default
    }
}

45voto

Pavlos Points 609

Ajouter View controller-based status bar appearance NO en Info.plist

Et sélectionnez Lumière dans le style de la barre d'état dans les informations de déploiement

entrez la description de l'image ici

35voto

paul king Points 846

Définissez votre variable darkMode en utilisant le même code que vous avez maintenant, puis utilisez-la dans la variable calculée que le système attend:

 var darkMode = false
override var preferredStatusBarStyle : UIStatusBarStyle {
    return darkMode ? .default : .lightContent
}
 

Selon le contexte, vous devrez peut-être forcer une actualisation de l'écran pour qu'elle prenne effet. Vous feriez cela avec l'appel suivant:

 setNeedsStatusBarAppearanceUpdate()
 

27voto

Md Rashed Pervez Points 1557

Dans swift4 , vous pouvez utiliser ce bloc de code en dessous de viewDidLoad() dans votre ViewController -

 override var preferredStatusBarStyle : UIStatusBarStyle {
    return .lightContent
}
 

13voto

CryingHippo Points 3770

Si vous utilisez UINavigationController, vous pouvez également utiliser le code suivant:

 extension UINavigationController {
   open override var preferredStatusBarStyle: UIStatusBarStyle {
      return topViewController?.preferredStatusBarStyle ?? .default
   }
}
 

La raison est setNeedsStatusBarAppearanceUpdate() n'appelle pas les enfants preferredStatusBarStyle

5voto

cmilr Points 249

Aucune des autres suggestions n'a fonctionné pour moi. J'ai fini par le faire fonctionner en:

  1. Réglage:

     override var preferredStatusBarStyle : UIStatusBarStyle {
        return .lightContent
    }
     
  2. Appel:

     setNeedsStatusBarAppearanceUpdate()
     

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X