背景色に基づいて、すべてのView Controllerでステータスバーのスタイルを更新する必要があります(UINavigationController
が自動的に行っていること)。
Stackoverflowで説明されているすべてのオプションを試してみました(View controller-based status bar appearance
のinfo.plist
をYESに設定しましたが、どれも機能しませんでした)。
Xcode 10ベータ6およびSwift 4.2を使用して、iOS 12をターゲットにしています。
View controller-based status bar appearance
をinfo.plist
でNO
に設定し、各View ControllerでpreferredStatusBarStyle
を次のようにオーバーライドします。
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
そして、View ControllerでsetNeedsStatusBarAppearanceUpdate()
を呼び出します(たとえば、viewDidLoad()
で)。
Swift 4.2、iOS 12
View controller-based status bar appearance
はinfo.plist
でYES
に設定する必要があります。UIKitではUIApplication.shared
を介してステータスバーのスタイルを編集する必要がなくなったためです。 。
次に、アプリレベルで変更を適用する場合は、適切なコンテナービューコントローラー(理想的にはルート)でpreferredStatusBarStyle
をオーバーライドします...
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
...そして、これはすべてのView Controllerに伝播します。また、View Controllerごとにステータスバーのスタイルを編集する場合は、View Controllerごとにこのオーバーライドを適用します。
実行中にステータスバーのスタイルが変わる場合は、setNeedsStatusBarAppearanceUpdate()
(コンテナ/ルートView Controllerまたはその特定のView Controllerのどこからでも)を呼び出す必要があります。そうでない場合は必要ありません。
View controller-based status bar appearance
にinfo.plist
がYESに設定されており、View ControllerがUINavigationController
に埋め込まれている場合、Navigation Controllerはバースタイルの更新を担当します。 (navigationController.navigationBar.barStyle
経由)およびpreferredStatusBarStyle
プロパティは無視されます
Xcode 10.2を使用していますが、info.plistのView controller-basedステータスバーの外観を「YES」に設定しても、ステータスバーのスタイルはまったく変更されません。
しかし、info.plistファイルの2つのキーを変更すると、追加のコーディングなしでステータスバーを明るいまたは暗いに変更するすべての作業が実行されることがわかりました。
これは私が自分でそれを修正するためにしたことです
info.plistファイルの一番上の行「情報プロパティリスト」にカーソルを合わせると、小さな丸い「+」ボタンが表示されます。このボタンをクリックし、次のキーが見つかるまでアイテムをスクロールします。
コントローラーベースのステータスバーの外観を表示する [この値を設定] 番号
ステータスバーのスタイル [この値を設定] UIStatusBarStyleLightContent
注意:UIStatusBarStyleLightContentは、値リストで選択可能な項目として見つからないため、値ボックスに入力する必要があります。
これが、あなたやこの質問への答えを探している人に役立つことを願っています。
最後に、私のために働いたもの:
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
}
Navコントローラーにラップされている場合、これが必要になります。
final class LightNavigationController: UINavigationController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}