在TabView内时,SwiftUI导航和状态栏的颜色/透明度冲突

Kil*_*ian 2 ios swiftui

我的应用程序由中的几个不同选项卡上的几个视图组成TabView。这些视图创建自己NavigationView的。不幸的是,的存在TabView导致其颜色和透明度与应用程序的状态栏(不再与导航栏一致)发生冲突。

使用以下代码可以轻松地在示例应用程序中重现这一点。

struct ContentView: View {
    var body: some View {
        TabView {
            NavView()
        }
    }
}

struct NavView: View {
    var body: some View {
        NavigationView {
            List {
                ForEach(0..<10, id: \.self) { _ in
                    Section(header: Text("Foo")) {
                        Text("Bar")
                    }
                }
            }
            .listStyle(GroupedListStyle())
            .navigationBarTitle("Foobar")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用分组列表样式使样式更改更明显,但默认样式相同。

是否有SwiftUI API可以访问状态栏样式?还是可能有其他解决方法?

大型导航栏屏幕截图

内联导航栏屏幕截图

fuz*_*uzz 5

根据Apple的文档,edgesIgnoringSafeArea(_:)应将其应用于TabView

https://developer.apple.com/documentation/swiftui/vsplitview/3288813-edgesignoringsafearea

将视图扩展到指定边缘的安全区域之外。

struct ContentView: View {
    var body: some View {
        TabView {
            NavView()
        }.edgesIgnoringSafeArea(.top)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • Apple 似乎更改了默认行为,而 iOS 13.4 不再需要这样做。 (3认同)