web-dev-qa-db-fra.com

preferredStatusBarStyle supprimé dans Swift 3?

donc je viens de mettre à jour Xcode 8 et je viens de recevoir cette erreur pour le code suivant.

L'erreur est que la méthode ne substitue aucune méthode de ses superclasses.

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return UIStatusBarStyle.lightContent
}

enter image description here

J'apprécierais vraiment l'aide, merci!

46
Amit Kalra

Dans iOS 10, preferredStatusBarStyle est une propriété, pas une méthode. Ainsi, au lieu de la remplacer par une déclaration func comme vous l'avez fait, vous substituez le getter à une déclaration var:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Le message d'erreur du compilateur Swift ici ici pourrait être probablement meilleur) - puisqu'il semble savoir que votre fonction de substitution est censée couvrir une propriété, elle pourrait probablement offrir cela comme solution. Je recommanderais rapporter un bogue à Swift open source .


Remarque: sous iOS 12, vous devrez peut-être également définir l'indicateur UIViewControllerBasedStatusBarAppearance (ou "Afficher l'apparence de la barre d'état basée sur le contrôleur") dans votre Info.plist. Et vérifiez la hiérarchie de votre contrôleur de vue, car les contrôleurs de vue de conteneur tels que la navigation et la vue fractionnée pourraient ne pas le transmettre à partir de leurs enfants.

141
rickster

Le iOS 10.0 API Diffs indique que la méthode UIViewController.preferredStatusBarStyle() -> UIStatusBarStyle a été supprimée et que le UIViewController.preferredStatusBarStyle La propriété a été ajoutée .


De la même manière, avec Xcode 8, vous pouvez right-click sur n'importe quel UIViewController de votre code, sélectionnez Jump to Definition puis effectuez une recherche pour preferredStatusBarStyle. Vous découvrirez que preferredStatusBarStyle a maintenant la déclaration suivante:

@available(iOS 7.0, *)
open var preferredStatusBarStyle: UIStatusBarStyle { get }

Par conséquent, l'extrait de code suivant montre comment remplacer preferredStatusBarStyle avec Xcode 8/Swift 3:

override var preferredStatusBarStyle: UIStatusBarStyle {
    get {
        return .lightContent
    }
}

Ou, dans un style beaucoup plus court et préféré:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
5
Imanou Petit