根据您的意图,您可以通过几种不同的方式在 SwiftUI 项目中隐藏状态栏。我列出了一些,没有特别的顺序。除 OPTION-2 外,所有示例均适用于使用 Xcode 11 和 Xcode 12 的 iOS 13 和 iOS 14。
OPTION-1
在你的 info.plist 文件中确保你有这些设置:
<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
添加以下 UIViewController 扩展
extension UIViewController {
func prefersStatusBarHidden() -> Bool {
return true
}
}
OPTION-2(仅限 iOS 14 和 Xcode 12)
在你的 info.plist 文件中确保你有这些设置:
<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
按照此链接中的说明将 AppDelegate 添加到 SwiftUI 应用程序,但添加下面提到的行。
https://www.hackingwithswift.com/quick-start/swiftui/how-to-add-an-appdelegate-to-a-swiftui-app
class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
UIApplication.shared.isStatusBarHidden = true // <== ADD THIS LINE
return true
}
}
请注意,您会收到已弃用的调用警告,但它应该仍然有效。
OPTION-3
在你的 info.plist 文件中确保你有这些设置:
<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
确保您的初始 SwiftUI 视图是一个导航视图,您可以在其中隐藏状态栏。然后,如果您导航到选项卡栏视图或任何后续视图,状态栏将被隐藏。
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink(destination: MyTabView()) {
Text("Go To Tabview")
}
}
.edgesIgnoringSafeArea(.all)
.statusBar(hidden: true)
}
}
struct MyTabView: View {
var body: some View {
TabView {
TabView1().tabItem {
Text("Tab 1")
}
TabView2().tabItem {
Text("Tab 2")
}
}
}
}
struct TabView1: View {
var body: some View {
Text("Tab View 1")
}
}
struct TabView2: View {
var body: some View {
Text("Tab View 2")
}
}
OPTION-4
使用 UIStatusBarManager
https://developer.apple.com/documentation/uikit/uistatusbarmanager