SwiftUI - NavigationLink 视图中的 NavigationBar 快速显示然后消失

Nie*_*orn 7 xcode uiviewcontroller ios swift swiftui

我有一个ContentView包含 aNavigationView导致 a DestinationView。我想将导航栏隐藏ContentViewDestinationView. 将它隐藏在ContentView我设置navigationBarHiddentrue并给出navigationBarTitle一个空字符串中。在DestinationViewI 设置navigationBarHidden为 false 并为其命名为“DestinationView”。

如果我运行该项目并点击NavigationLink,则DestinationView显示 ,NavigationBar但在视图出现后迅速将其隐藏。有人可以帮我解决这个问题吗?

struct ContentView: View {
    var body: some View {
        NavigationView {
            ZStack {
                Color.red.frame(maxWidth: .infinity, maxHeight: .infinity)
                NavigationLink(destination: DestinationView()) {
                    ZStack {
                        Color.green.frame(width: 200, height: 200)
                        Text("Tap me")
                    }
                }
            }
            .navigationBarTitle("")
            .navigationBarHidden(true)
        }
    }
}

struct DestinationView: View {
    var body: some View {
        List {
            Text("1")
            Text("2")
        }
        .navigationBarTitle("DestinationView")
        .navigationBarHidden(false)
    }
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

use*_*632 22

您需要使用变量来实现这一点并将其与您的目的地绑定

struct ContentView: View {
         @State var isNavigationBarHidden: Bool = true
        var body: some View {
            NavigationView {

                ZStack {
                    Color.red.frame(maxWidth: .infinity, maxHeight: .infinity)
                    NavigationLink(destination: DestinationView(isNavigationBarHidden: self.$isNavigationBarHidden)) {
                        ZStack {
                            Color.green.frame(width: 200, height: 200)
                            Text("Tap me")
                        }
                    }

                }
                .navigationBarHidden(self.isNavigationBarHidden)
                .navigationBarTitle("")
                .onAppear {
                    self.isNavigationBarHidden = true
                }
            }
        }
    }

    struct DestinationView: View {
        @Binding var isNavigationBarHidden: Bool
        var body: some View {
            List {
                Text("1")
                Text("2")
            }
            .navigationBarTitle("DestinationView")

            .onAppear {
                self.isNavigationBarHidden = false
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)