首页 > 解决方案 > 嵌入在 NavigationView 中的视图(后者隐藏了 navBar)每次推送到视图时都会出现故障 [SwiftUI]

问题描述

在过去的一个小时里,我一直在为此苦苦挣扎,主要是因为我看到的所有解决方案似乎都比真正的解决方案更老套,这让我质疑 SwiftUI 中 NavigationBar 的生产准备情况。

我有一个 MainView 和一个 PushView,我需要在两个视图上隐藏导航栏。但是,这会产生以下问题:

1)当PushView被推到MainView上时,出现nav bar出现然后消失的故障。

2) 现在无法返回 MainView,因为 PushView 中的后退按钮现在也被隐藏了。

我想要的是我自己在 PushView 中的按钮,它会弹出这个 View 并返回 HomeView

我究竟做错了什么:

struct HomeView: View {
    var body: some View {

        NavigationView {

            NavigationLink(destination: PushView()) {
                Text("PRESSME")
            }.navigationBarTitle("")
            .navigationBarHidden(true)

        }
    }
}

struct PushView: View {

    var body: some View {
        Text("Hello View Two")
    }
}

标签: swiftuiuinavigationbarswiftui-navigationlink

解决方案


是的,正如您已经亲身体验过的那样,NavBar 有点错误。

在我看来不是 hacky 的干净解决方案如下所示:

struct HomeView: View {
    var body: some View {

        NavigationView {

            NavigationLink(destination: PushView()) {
                Text("PRESSME")
            }.navigationBarTitle("")
                .navigationBarHidden(true)

        }
    }
}

struct PushView: View {
    @Environment(\.presentationMode) var presentationMode

    var btnBack : some View {
        Button(action: {
            self.presentationMode.wrappedValue.dismiss()
        }) {
            Image(systemName: "chevron.left")
        }
    }

    var body: some View {
        VStack {
            HStack {
                btnBack // Your custom back button.
                    .padding()
                Spacer()
            }
            Spacer()
            Text("Hello View Two")
            Spacer()
        }
        .navigationBarTitle("")
            .navigationBarHidden(true) // This hides the NavBar on PushView.
    }
}

推荐阅读