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

时间:2019-10-14 17:00:08

标签: 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")
        }
    }
}

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

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

large navigation bar screenshot

inline navigation bar screenshot

2 个答案:

答案 0 :(得分:5)

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

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

  

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

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

答案 1 :(得分:0)

由于某种原因,它对我来说无法正常工作。情况是在没有from multiprocessing import Pool import numpy def play_game(neural_net): foo = [[0 for i in range(3)] for j in range(3)] return neural_net.predict(numpy.array([foo])) def make_net(): from keras import Input, Model from keras.layers import Dense from keras.optimizers import Adam from tensorflow import nn input = Input((3, 3)) output = Dense(1)(input) model = Model(inputs=input, outputs=[output]) adam = Adam(0.2) model.compile(adam, [nn.softmax_cross_entropy_with_logits]) model.summary() return model def main(): neural_net = make_net() with Pool() as p: training_data = p.map(play_game, [neural_net for i in range(10)], 3) print(training_data) if __name__ == '__main__': main() 仅适用于模拟器而不适用于设备的情况下可以正常工作。反之亦然。

创建了一个小的修改器来修复它。

edgesIgnoringSafeArea(_:)