StatusBarStyle 是一个 iOS 库,可以让你轻松地在 SwiftUI 视图中设置状态栏样式。
这个库的灵感来自 SwiftUI-Introspect。它也通过将 StatusBarStylingView
添加到视图层级中,并交换 UIHostingController
的 childForStatusBarStyle
和 childForStatusBarHidden
的 getter 方法,使其引用其中设置的状态栏样式。因此,在已经交换了这些 getter 方法的项目中,它可能无法按预期工作。
StatusBarStyling: StatusBarStyling 提供了 setup()
静态函数,需要在应用程序初始化时调用,以及 statusBar(style:hidden:)
函数,它可以作为 SwiftUI.View
的扩展使用。
NavigationStatusBarStyling: NavigationStatusBarStyling 也提供了 setup()
静态函数,需要在应用程序初始化时调用。与 StatusBarStyling 的不同之处在于,它不仅交换 UIHostingController
的 getter 方法,还交换了 UINavigationController
的 childForStatusBarStyle
和 childForStatusBarHidden
的 getter 方法。 建议使用此库,除非您专门覆盖了相应的属性。如果您已经深度使用 UINavigationController
,您可以选择使用 StatusBarStyling。
StatusBarStyling 代码库支持 iOS,需要 Xcode 14.0 或更高版本。此库的基本 SDK 版本为 14.0。
首先,它基于方法交换 (swizzling) 实现,你必须在应用程序初始化时进行设置,例如:
import NavigationStatusBarStyling // or StatusBarStyling
final class AppDelegate: UIResponder, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
NavigationStatusBarStyling.setup() // or StatusBarStyling.setup()
return true
}
}
并在 SwiftUI 视图中使用 statusBar(style:hidden:)
函数,例如:
import StatusBarStyling
struct ContentView: View {
var body: some View {
Text("ContentView")
.statusBar(style: .lightContent, hidden: false)
}
}
通常,视图层级结构中最内层的状态栏样式会被应用,例如:
import StatusBarStyling
struct ContentView: View {
var body: some View {
VStack {
Text("1")
VStack {
Text("2")
VStack {
Text("3")
VStack {
Text("4")
.statusBar(style: .darkContent)
}
}
}
}
.statusBar(style: .lightContent)
}
}
仓库中有 2 个示例项目(StoryboardBased, SwiftUIBased),因此在您的项目中使用时请参考它们。
本项目是在 MIT 许可证的条款下提供的。 请参阅 LICENSE 文件。