首页 > 解决方案 > 如果取消滑动返回上一屏的过程,navigationBar保持不变

问题描述

使用navigationBarItems从View中滑动,取消滑动返回上一屏时,上一屏的navigationBar保持不变,没有消失。

这是一个错误吗?

还是我的实施错误?

您可以在这里查看现象。

struct TopView: View {
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: DetailView()) {
                    Text("Detail")
                }
            }
            .navigationBarTitle("Top")
        }
    }
}

struct DetailView: View {
    var body: some View {
        VStack {
            NavigationLink(destination: EditView()) {
                Text("Edit")
            }
        }
        .navigationBarTitle("Detail", displayMode: .inline)
    }
}

struct EditView: View {
    @Environment(\.presentationMode) private var presentationMode: Binding<PresentationMode>

    var body: some View {
        VStack {
            Text("Title")
        }
        .navigationBarTitle("Edit", displayMode: .inline)
        .navigationBarItems(
            trailing:
            Button(action: {
                self.presentationMode.wrappedValue.dismiss()
            }) {
                Text("Save")
            }
        )
    }
}

@Environment (.PresentationMode) 私有变量presentationMode:绑定

如果这不存在,就不会发生。

标签: swiftswiftui

解决方案


这是修复

struct DetailView: View {
    var body: some View {
        VStack {
            NavigationLink(destination: EditView()) {
                Text("Edit")         
            }.isDetailLink(false)                            // << here !!
        }
        .navigationBarTitle("Detail", displayMode: .inline)
    }
}

推荐阅读