1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

SwiftUI コードからステータスバーを白色にする

はじめに

今までは、こちらの記事ステータスバーのスタイル(色)変更方法優先度 まとめにあるように
プロジェクトセッティングのGeneral、もしくはInfoPlist、もしくは、コードからの変更で対応してきましたが、SwiftUIの場合はどうかなと思い調べてみました。

General、もしくはInfoPlistの場合

変わらず今まで通り適用可能。

コードの場合

基本的にSwiftUIではUIViewControllerではなく、structなViewをいじっていますが、
調べたところ、View側ではいじれそうになかった。

UIHostingViewControllerでpreferredStatusBarStyleをoverrideする

class HostingController: UIHostingController<ContentView> {
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
}

このようにUIHostingControllerを継承したViewControllerを定義してsceneDelegateでホスティングします。

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        let contentView = ContentView()
        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            window.rootViewController = HostingController(rootView: contentView)
            self.window = window
            window.makeKeyAndVisible()
        }
    }

これで、ステータスバーの色を白に変更できます。

まとめ

各Viewごとにステータスバーを変えたい場合や、NavigationViewを使用している場合に動的にステータスバーを変更したい場合はどうするのかはまだ調べてませんが、SwiftUI側でいじれなさそうな雰囲気。
NavigationBarTitleの色変更もappearanceで変更しないといけなかったりで少し使いづらい印象があります。

何か上手いやり方があればアドバイスしていただきたいです。

お読みいただきありがとうございました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?