如何在 SwiftUI 中隐藏状态栏

Ale*_*eng 4 statusbar hide swiftui

我想隐藏 SwiftUI 中的状态栏。我尝试过“statusBar(hidden: true)”方法,但它不起作用。是否有任何解决方案可以在 SwiftUI 中实现。

演示代码如下:

var body: some View {
        VStack {
            Text("Hello World")

        }
        .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
        .background(Color.blue)
        .edgesIgnoringSafeArea(.all)
        .statusBar(hidden: true)

    }
Run Code Online (Sandbox Code Playgroud)

Meh*_*lar 12

.edgesIgnoringSafeArea(.all)
.statusBar(hidden: true)
Run Code Online (Sandbox Code Playgroud)

尝试这个

  • 这似乎在 iOS 14 中被破坏了......无论我做什么,我都无法隐藏状态栏以在具有导航视图的屏幕上工作 (18认同)

Luk*_*ker 9

iOS 14、SwiftUI

\n

我发现,iOS14中最有效的方法是进入info.plist. 但是,此方法始终有效,这意味着如果您想在单击 \xc2\xa0UIButton 时返回状态栏,那么此方法不适合您。

\n

对我来说,它适用于整个应用程序,无论是否使用 NavigationView 实例。

\n

“作为源代码”打开 Info.plist (见下图)并将这四行粘贴到其中:

\n
<key>UIStatusBarHidden</key>\n<true/>\n<key>UIViewControllerBasedStatusBarAppearance</key>\n<false/>\n
Run Code Online (Sandbox Code Playgroud)\n

在此输入图像描述

\n


xde*_*eon 5

根据您的意图,您可以通过几种不同的方式在 SwiftUI 项目中隐藏状态栏。我列出了一些没有特别的顺序。除了OPTION-2之外,所有示例都适用于使用 Xcode 11 和 Xcode 12 的 iOS 13 和 iOS 14 。

OPTION-1
在您的 info.plist 文件中,确保您有以下设置:

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
Run Code Online (Sandbox Code Playgroud)

添加以下 UIViewController 扩展

extension UIViewController {
    func prefersStatusBarHidden() -> Bool {
        return true
    }
}
Run Code Online (Sandbox Code Playgroud)

OPTION-2(仅限 iOS 14 和 Xcode 12)
在您的 info.plist 文件中,确保您有以下设置:

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
Run Code Online (Sandbox Code Playgroud)

如此链接中所述,将 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
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,您会收到已弃用的调用警告,但它应该仍然有效。

OPTION-3
在您的 info.plist 文件中,确保您有以下设置:

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
Run Code Online (Sandbox Code Playgroud)

确保您的初始 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")
    }
}
Run Code Online (Sandbox Code Playgroud)

选项 4
使用 UIStatusBarManager https://developer.apple.com/documentation/uikit/ustatusbarmanager