Vient de télécharger le nouveau xCode 10.0 et constate que l'ancien statusBarStyle est obsolète depuis iOS 9.0.
Attention:Setter for 'statusBarStyle' was deprecated in iOS 9.0: Use -[UIViewController preferredStatusBarStyle]
Code obsolète:UIApplication.shared.statusBarStyle = .default
J'ai essayé d'utiliser self.preferredStatusBarStyle
, mais j'ai découvert que la propriété n'était qu'un getter. Donc, tout le monde sait comment régler la statusBarStyle
?
Je souhaite modifier le statusBarStyle dans une fonction, dans laquelle un utilisateur peut basculer entre différents thèmes. Par exemple:
func changeStatusBar(toDarkMode: Bool) {
if toDarkMode {
// Set to light statusBarStyle
} else {
// Set to default
}
}
Définissez votre variable darkMode en utilisant le même code que celui que vous avez maintenant, puis utilisez-la dans la variable calculée attendue par le système:
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 que celle-ci prenne effet. Vous feriez cela avec l'appel suivant:
setNeedsStatusBarAppearanceUpdate()
Dans Swift4, vous pouvez utiliser ce bloc de code sous viewDidLoad()
dans votre ViewController
-
override var preferredStatusBarStyle : UIStatusBarStyle {
return .lightContent
}
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 l'enfant preferredStatusBarStyle
Aucune des autres suggestions n'a fonctionné pour moi. J'ai fini par le faire fonctionner par:
Réglage:
override var preferredStatusBarStyle : UIStatusBarStyle {
return .lightContent
}
Appel:
setNeedsStatusBarAppearanceUpdate()
Ma solution était la suivante: créer une extension à partir du contrôleur de navigation:
extension UINavigationController {
open override var preferredStatusBarStyle: UIStatusBarStyle {
if let topViewController = presentedViewController{
return topViewController.preferredStatusBarStyle
}
if let topViewController = viewControllers.last {
return topViewController.preferredStatusBarStyle
}
return .default
}
}
et si vous avez un viewController qui aura un autre style que le style de l'application, vous pouvez le faire
var barStyle = UIStatusBarStyle.lightContent
override var preferredStatusBarStyle: UIStatusBarStyle{
return barStyle
}
supposons que le style de votre statut d'application soit .default
et que vous souhaitiez que cet écran soit .lightContent
afin que barStyle prenne .lightContent
comme valeur par défaut. Le style de la barre d'état devient alors lightContent. puis assurez-vous que lorsque viewWillDisappear
changez à nouveau le style de barre de style dans le style de barre d'état d'application qui, dans notre cas, est .default
.
cela fonctionne pour moi