我的应用程序由TabView内几个不同选项卡上的几个 View 组成。这些 View 创建自己的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")
        }
    }
}

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

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

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

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

最佳答案

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

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


struct ContentView: View {
    var body: some View {
        TabView {
            NavView()
        } // .edgesIgnoringSafeArea(.top) no longer necessary as of iOS 13.4
    }
}

注意:看来Apple更改了默认行为,而iOS 13.4不再需要此行为。

关于ios - 在TabView中时,SwiftUI导航和状态栏的颜色/透明度冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58381133/

10-17 01:10