web-dev-qa-db-ja.com

ステータスバーのスタイルを変更する方法-iOS 12

背景色に基づいて、すべてのView Controllerでステータスバーのスタイルを更新する必要があります(UINavigationControllerが自動的に行っていること)。

Stackoverflowで説明されているすべてのオプションを試してみました(View controller-based status bar appearanceinfo.plistYESに設定しましたが、どれも機能しませんでした)。

Xcode 10ベータ6およびSwift 4.2を使用して、iOS 12をターゲットにしています。

14
Tomáš Pánik

View controller-based status bar appearanceinfo.plistNOに設定し、各View ControllerでpreferredStatusBarStyleを次のようにオーバーライドします。

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

そして、View ControllerでsetNeedsStatusBarAppearanceUpdate()を呼び出します(たとえば、viewDidLoad()で)。

22
ielyamani

Swift 4.2、iOS 12

View controller-based status bar appearanceinfo.plistYESに設定する必要があります。UIKitではUIApplication.sharedを介してステータスバーのスタイルを編集する必要がなくなったためです。 。

次に、アプリレベルで変更を適用する場合は、適切なコンテナービューコントローラー(理想的にはルート)でpreferredStatusBarStyleをオーバーライドします...

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

...そして、これはすべてのView Controllerに伝播します。また、View Controllerごとにステータスバーのスタイルを編集する場合は、View Controllerごとにこのオーバーライドを適用します。

実行中にステータスバーのスタイルが変わる場合は、setNeedsStatusBarAppearanceUpdate()(コンテナ/ルートView Controllerまたはその特定のView Controllerのどこからでも)を呼び出す必要があります。そうでない場合は必要ありません。

24
bsod

View controller-based status bar appearanceinfo.plistYESに設定されており、View ControllerがUINavigationControllerに埋め込まれている場合、Navigation Controllerはバースタイルの更新を担当します。 (navigationController.navigationBar.barStyle経由)およびpreferredStatusBarStyleプロパティは無視されます

7
swearwolf

Xcode 10.2を使用していますが、info.plistのView controller-basedステータスバーの外観を「YES」に設定しても、ステータスバーのスタイルはまったく変更されません。

しかし、info.plistファイルの2つのキーを変更すると、追加のコーディングなしでステータスバーを明るいまたは暗いに変更するすべての作業が実行されることがわかりました。

これは私が自分でそれを修正するためにしたことです
info.plistファイルの一番上の行「情報プロパティリスト」にカーソルを合わせると、小さな丸い「+」ボタンが表示されます。このボタンをクリックし、次のキーが見つかるまでアイテムをスクロールします。

コントローラーベースのステータスバーの外観を表示する [この値を設定] 番号
ステータスバーのスタイル [この値を設定] UIStatusBarStyleLightContent

注意:UIStatusBarStyleLightContentは、値リストで選択可能な項目として見つからないため、値ボックスに入力する必要があります。

info.plist

これが、あなたやこの質問への答えを探している人に役立つことを願っています。

5
Jim Bray

最後に、私のために働いたもの:

Info.plistに追加します。

View controller-based status bar appearance : YES

各ViewControllerについて、viewDidLoad()およびviewDidAppear()に追加します。

self.setNeedsStatusBarAppearanceUpdate()

a)暗い色のステータスバーの場合、ViewControllerに追加します。

    override var preferredStatusBarStyle: UIStatusBarStyle {
    return .default
}

b)白色のステータスバーの場合、ViewControllerに追加します。

    override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
0
Anton Eregin

Navコントローラーにラップされている場合、これが必要になります。

final class LightNavigationController: UINavigationController {
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
}
0
thexande