webentwicklung-frage-antwort-db.com.de

preferredStatusBarStyle entfernt in Swift 3?

daher habe ich kürzlich ein Update auf Xcode 8 durchgeführt und habe gerade diesen Fehler für den folgenden Code erhalten.

Der Fehler ist, dass die Methode keine Methode aus ihren Oberklassen überschreibt.

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

enter image description here

Ich würde mich sehr über Hilfe freuen, danke!

46
Amit Kalra

In iOS 10 ist preferredStatusBarStyle eine Eigenschaft, keine Methode. Anstatt es mit einer func -Deklaration zu überschreiben, wie Sie es getan haben, überschreiben Sie den Getter mit einer var -Deklaration:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Die Fehlermeldung des Swift Compilers hier könnte wahrscheinlich besser sein - da es so aussieht, als ob Ihre Override-Funktion eine Eigenschaft abdecken soll, könnte sie diese wahrscheinlich als Korrektur anbieten. Ich würde empfehlen Einreichung eines Fehlers an Swift Open Source .


Hinweis: Unter iOS 12 müssen Sie möglicherweise auch das Flag UIViewControllerBasedStatusBarAppearance (auch als "Controller-basierte Statusleiste anzeigen" bezeichnet) in Ihrer Info.plist setzen. Überprüfen Sie auch Ihre View-Controller-Hierarchie, da Container-View-Controller wie Navigation und geteilte Ansicht dies möglicherweise nicht von ihren untergeordneten Elementen weitergeben.

141
rickster

Die iOS 10.0 API Diffs zeigt, dass die UIViewController.preferredStatusBarStyle() -> UIStatusBarStyle -Methode entfernt wurde und dass die UIViewController.preferredStatusBarStyle Eigenschaft wurde hinzugefügt .


Auf ähnliche Weise können Sie mit Xcode 8 right-click Wählen Sie in einem beliebigen UIViewController in Ihrem Code Jump to Definition und führen Sie dann eine Suche nach preferredStatusBarStyle durch. Sie werden feststellen, dass preferredStatusBarStyle jetzt die folgende Deklaration hat:

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

Aus diesem Grund zeigt der folgende Codeausschnitt, wie preferredStatusBarStyle mit Xcode 8/Swift 3 überschrieben wird:

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

Oder in einem viel kürzeren und bevorzugten Stil:

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