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
如果使用新的应用程序生命周期,是否可以更改状态栏颜色?
我知道对于 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