web-dev-qa-db-ja.com

preferredStatusBarStyleは、Swift 3?

そのため、最近Xcode 8に更新したばかりで、次のコードでこのエラーが発生しました。

エラーは、メソッドがそのスーパークラスのメソッドをオーバーライドしないことです。

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

enter image description here

本当に感謝しています!

46
Amit Kalra

IOS 10では、 preferredStatusBarStyle はプロパティであり、メソッドではありません。したがって、これまでのようにfunc宣言でオーバーライドする代わりに、var宣言でゲッターをオーバーライドします。

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

ここのSwiftコンパイラーのエラーメッセージはおそらくもっと良いかもしれません-オーバーライドfuncがプロパティをカバーするはずであることがわかっているように見えるので、おそらくそれを修正として提供することができます。 バグをSwiftオープンソース に提出します。


注:iOS 12では、Info.plistでUIViewControllerBasedStatusBarAppearance(「コントローラーベースのステータスバーの表示」とも呼ばれる)フラグを設定する必要があります。また、NavigationやSplit ViewなどのコンテナView Controllerが子か​​らこれを伝播しない可能性があるため、View Controllerの階層を確認してください。

141
rickster

iOS 10.0 API Diffs は、UIViewController.preferredStatusBarStyle() -> UIStatusBarStyleメソッドがremovedであり、UIViewController.preferredStatusBarStyleプロパティが追加されましたadded


同様に、Xcode 8では次のことができます。 right-click コードのUIViewControllerで、選択します Jump to Definition preferredStatusBarStyleの検索を実行します。 preferredStatusBarStyleに次の宣言があることがわかります。

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

したがって、次のコードスニペットは、Xcode 8で preferredStatusBarStyle をオーバーライドする方法を示しています/ Swift 3:

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

または、はるかに短い優先スタイルで:

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