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