3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-10-09

はじめに

今までは、こちらの記事ステータスバーのスタイル(色)変更方法優先度 まとめにあるように
プロジェクトセッティングの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で変更しないといけなかったりで少し使いづらい印象があります。

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

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

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?