web-dev-qa-db-ja.com

preferredStatusBarStyle varはiOS12で動作しませんか?

追加中

application.statusBarStyle = .lightContent

私のAppDelegateのdidFinishLaunchingWithOptionsメソッドに追加も

override var preferredStatusBarStyle: UIStatusBarStyle {
    return UIStatusBarStyle.lightContent
}

VCはiOS12/Xcode10では動作しなくなりました

何か案は?

10
Nostradamus

View Controllerごとに同じステータスバーの色を選択した場合:

<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

これをInfo.plistに追加し、[プロジェクト]-> [ターゲット]-> [ステータスバースタイル]から目的の色でステータスバーの色を設定します。

一方、あなたのケースでは、View Controllerに埋め込まれたNavigation Controllerがあります。したがって、ページごとに異なるステータスバーの色にする必要があります。

<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>

これをInfo.plistに広告します。次に、NavigationControllerのカスタムクラスを作成します。その後、メソッドを実装できます。

class LightContentNavigationController: UINavigationController {

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
}

それでおしまい!これが有用かどうか教えてください!

16
Oliver

これはiOS 12とは関係ありません。ルールが間違っているだけです。

Navigation Controllerの状況では、ステータスバーの色はView ControllerのpreferredStatusBarStyleによって決定されません。

驚くべきことに、ナビゲーションバーのbarStyleによって決定されます。ライトステータスバーのテキストを取得するには、次のように言います(View Controllerで):

self.navigationController?.navigationBar.barStyle = .black

信じ難いが、真実。私はこの情報を数年前にAppleから直接入手しました。

ストーリーボードでこの設定を実行することもできます。

例!ナビゲーションバーのバースタイルは.default

enter image description here

ナビゲーションバーのバースタイルは.black

enter image description here

iOS 13の注意事項これは、大きなタイトルやUIBarAppearanceを使用しない限り、iOS 13でも機能します。しかし、基本的にはこれをやめ、ユーザーのライトモードまたはダークモードの選択に応じてステータスバーの色を自動にする必要があります。

43
matt