根据您的意图,您可以有几种不同的方法在SwiftUI项目中隐藏状态栏。我列出了一些没有特定顺序的例子。除了OPTION-2,所有示例都适用于使用Xcode 11和Xcode 12的iOS 13和iOS 14。
选项1:
在info.plist文件中确保您具有以下设置:
<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
添加以下 UIViewController 扩展
extension UIViewController {
func prefersStatusBarHidden() -> Bool {
return true
}
}
选项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
return true
}
}
请注意,你将会收到一个弃用调用警告,但它仍然可以工作。
选项三
在你的 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
.edgesIgnoringSafeArea(.all)
它就不会隐藏。 - sig