iOSでステータスバーの色を変更する
はじめに
iOSのStatusBarの色を変更したいことはよくあります。
でも、やりかたをよく忘れてしまいます。
なので、まとめます。
アプリ全体での色の設定
- info.plistで "View controller-based status bar appearance"にNOを設定
- appDelegate.swift のdidFinishLaunchingWithOptions内で以下を設定
UIApplication.shared.statusBarStyle = .lightContent
画面個別での色の設定
各画面のViewController以下の値をOverride。ただしGetterしかありません。
override func preferredStatusBarStyle: UIStatusbarStyle { return .lightContent // 白くする }
ただし、ステータスバーの色を同一ViewController内で変更した場合、次のメソッドを呼ぶ必要があります。
setNeedStatusBarAppearanceUpdate()
解説
"View controller-based status bar appearance"について
- YES: デフォルトの設定であり、ViewControllerごとに設定
- NO: アプリ全体として設定する
したがって、NOを設定した場合は、UIApplication.sharedで一括設定しています。 もしくは、Applicationの[Target]-[Status Bar Style]で設定します。
一方で画面ごと変更したい場合は、プロパティをOverrideします。 ただし、NavigationViewControllerなどを使っている場合は、その他の設定方法になるので、そのうちまとめたいと思います。
お遊び
以上より、次のようなコードを書くとタップするたびにステータスバー色を変えることができます。
var _preferredStatusColor: UIStatusBarStyle = .lightContent { didSet { setNeedsStatusBarAppearanceUpdate() } } override var preferredStatusBarStyle: UIStatusBarStyle { return self._preferredStatusColor } @IBAction func change(_ sender: Any) { if self._preferredStatusColor == .lightContent { self._preferredStatusColor = .default } else { self._preferredStatusColor = .lightContent } }