SwiftUI 生命周期应用程序 : How to change Status Bar Color

标签 swift swiftui statusbar

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

我知道对于 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 将在开始时创建两次

关于SwiftUI 生命周期应用程序 : How to change Status Bar Color,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63945224/

相关文章:

ios - 类似于 Swift 中的回调

swift - 如何创建表格 View 部分之间的间距? (每个部分的页眉和页脚已经是自定义 View )

swift - 如何在 swift 中围绕 Alamofire.authenticate 方法制作登录异步函数包装器?

安卓状态栏图标

android - 控制android状态栏图标

cocoa - 如何向 OS X 状态栏添加动画图标?

ios - 保存文件并作为电子邮件附件发送

swift - 如何访问 SwiftUI 中的 subview ?

swift - 填充颜​​色影响 SwiftUI 中的阴影

ios - SwiftUI - Firebase 身份验证 - 环境对象不会在登录时更新