web-dev-qa-db-fra.com

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

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?


Modifier

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
    }
}
32
Jacob Ahlberg

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()
23
Paul King

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

Et sélectionnez Léger dans Style de la barre d'état dans Informations de déploiement.

enter image description here

35
Pavlos

Dans Swift4, vous pouvez utiliser ce bloc de code sous viewDidLoad() dans votre ViewController-

override var preferredStatusBarStyle : UIStatusBarStyle {
    return .lightContent
}
23
Md Rashed Pervez

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

10
CryingHippo

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

  1. Réglage:

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

    setNeedsStatusBarAppearanceUpdate()
    
5
cmilr

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

1
hesham ghalaab