PageTabViewStyle破坏了NavigationView

时间:2020-09-28 22:55:22

标签: swiftui

我正在处理SwiftUI视图。在TabView内使用NavigationView时,该应用程序将按预期运行。

struct ContentView: View {
    
    var body: some View {
        TabView {
            NavigationView {
                Text("A")
                    .navigationBarTitle("Nav A")
            }
            .frame(maxWidth: .infinity, maxHeight: .infinity)
            NavigationView {
                Text("B")
                    .navigationBarTitle("Nav B")
            }
            .frame(maxWidth: .infinity, maxHeight: .infinity)
        }
        //.tabViewStyle(PageTabViewStyle(indexDisplayMode: .never)) // this line breaks the view
    }
}

我取消注释.tabViewStyle(...)后,该视图将无法正常工作。有什么想法吗?该文本不再可见。导航似乎也不正确。

Works fine without PageTabViewStyle

PageTabViewStyle breaks view

2 个答案:

答案 0 :(得分:1)

尝试将NavigationView移到TabView之外:

struct ContentView: View {
    @State var selection = 1

    var body: some View {
        NavigationView {
            TabView(selection: $selection) {
                Text("A").tag(1)
                Text("B").tag(2)
            }
            .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
            .navigationTitle(selection == 1 ? "A" : "B")
        }
    }
}

答案 1 :(得分:0)

似乎NavigationView默认显示为主要/详细信息显示。

您可以使用修饰符.navigationViewStyle(StackNavigationViewStyle())强制其像普通导航堆栈一样工作

在您的代码中:

struct ContentView: View {

var body: some View {
    TabView {
        NavigationView {
            Text("A")
                .navigationBarTitle("Nav A")
        }
        .navigationViewStyle(StackNavigationViewStyle())
        .frame(maxWidth: .infinity, maxHeight: .infinity)
        NavigationView {
            Text("B")
                .navigationBarTitle("Nav B")
        }
        .navigationViewStyle(StackNavigationViewStyle())
        .frame(maxWidth: .infinity, maxHeight: .infinity)
    }
    .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never)) 
}

}