SwiftUI 生命周期应用程序:如何更改状态栏颜色

SwiftUI Life Cycle App: How to change Status Bar Color

如果使用新的应用程序生命周期,是否可以更改状态栏颜色?

我知道对于 UIKit 生命周期,有一种变通方法,您可以创建自己的 HostingController 来覆盖颜色。 但是新的 SwiftUI 生命周期根本没有使用 UIHostingController

这是一个可能的解决方法:

@main
struct TestApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView() // or any other loading view
                .onAppear(perform: UIApplication.shared.switchHostingController)
        }
    }
}

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

extension UIApplication {
    func switchHostingController() {
        windows.first?.rootViewController = HostingController(rootView: ContentView())
    }
}

我注意到两个缺点:

  • 状态栏样式在.onAppear中切换 - 看到之前的样式时可能会有一瞬间
  • 开头会创建两次ContentView