在SwiftUI中存在多个导航视图时,如何隐藏导航栏

4
我在处理多个导航视图时遇到了隐藏导航栏的问题。我希望第一和第二屏幕上有导航栏,但第三屏幕上没有。
struct FirstView: View {

    init() {
        UINavigationBar.appearance().backgroundColor = UIColor.green
    }

    var body: some View {
        NavigationView {
                NavigationLink(destination: SecondView()) {
                    Text("Second View")
            }.navigationBarTitle("First View")
        }
    }
}
 
// Second View

struct SecondView: View {
    var body: some View {
        NavigationLink(destination: ThirdView()) {
            Text("Third View")
        }
    }
}

// Third View 

struct ThirdView: View {

    var body: some View {
        
            Text("Welcome")
            .navigationBarTitle("")
            .navigationBarHidden(true)
        
    }
}

我尝试使用上述代码在第三个屏幕隐藏导航栏,但它不起作用 :(

It doesn't hide the navigation bar


1
每个导航堆栈只能有 一个 NavigationView。 - pawello2222
1个回答

2
如果您想在第三个视图中完全隐藏导航栏,这是可能的方法。(注意:在一个视图层次结构中必须只有一个NavigationView,因此ThirdView中不需要另一个NavigationView)。
已经在Xcode 11.4 / iOS 13.4上进行了测试。
class HideBarViewModel: ObservableObject {
    @Published var isHidden = false
}

struct FirstView: View {
    @ObservedObject var vm = HideBarViewModel()
    init() {
        UINavigationBar.appearance().backgroundColor = UIColor.green
    }

    var body: some View {
        NavigationView {
                NavigationLink(destination: SecondView()) {
                    Text("Second View")
            }.navigationBarTitle("First View")
            .navigationBarHidden(vm.isHidden)
        }.environmentObject(vm)
    }
}

// Second View

struct SecondView: View {
    var body: some View {
        NavigationLink(destination: ThirdView()) {
            Text("Third View")
        }
    }
}

// Third View

struct ThirdView: View {
    @EnvironmentObject var vm: HideBarViewModel
    var body: some View {
        Text("Welcome")
            .onAppear {
                self.vm.isHidden = true
            }
    }
}

这将如何帮助我隐藏第三个屏幕的导航栏?您建议的解决方案只是在第二个屏幕上添加了一个标题。尝试了您的解决方案,但它并没有解决我想要实现的目标 :( - user2580

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接