Ios 如何弹出导航视图并返回到上一个视图而不是根视图SwiftUI?

Ios 如何弹出导航视图并返回到上一个视图而不是根视图SwiftUI?,ios,swift,swiftui,Ios,Swift,Swiftui,我有一个ContentView,它是导航到DetailView的根视图。这个DetailView有一个导航到Help2视图的navbaritem我想单击一个按钮来关闭Help2视图,并返回到DetailView(Help2来自的视图) 当前,当我按下Help2视图上的按钮时,它会取消该视图,但它会将我返回到根ContentView而不是DetailView。如果我导航到Help2视图,然后手动单击后退按钮导航到DetailView,它将转到DetailView。然后,如果我立即单击navbari

我有一个
ContentView
,它是导航到
DetailView的根视图。
这个
DetailView
有一个导航到
Help2
视图的
navbaritem
我想单击一个按钮来关闭
Help2
视图,并返回到
DetailView
(Help2来自的视图)

当前,当我按下
Help2
视图上的按钮时,它会取消该视图,但它会将我返回到根
ContentView
而不是
DetailView
。如果我导航到
Help2
视图,然后手动单击后退按钮导航到
DetailView
,它将转到
DetailView
。然后,如果我立即单击
navbaritem
返回
Help2
视图,然后单击按钮关闭视图,它将转到
DetailView
而不是
ContentView

内容视图

struct ContentView: View {
var body: some View {
    NavigationView {
        VStack {
            NavigationLink(destination: DetailView()) {
                Text("Show Detail View")
            }.navigationBarTitle("Navigation")
        }
    }
  }
}
struct DetailView: View {
@Environment(\.presentationMode) var presentationMode

var body: some View {
    VStack{
        Button(action: {
            self.presentationMode.wrappedValue.dismiss()
        })
        {
            Text("Root")
        }
    }
    .navigationBarTitle("DetailView", displayMode: .inline)
    .navigationBarItems(trailing:
        NavigationLink(destination: Help2()){
            Image(systemName: "plus").imageScale(.medium)
        }
    )
  }
}
struct Help2: View {
@Environment(\.presentationMode) var presentationMode

var body: some View {
    Button(action: {
        self.presentationMode.wrappedValue.dismiss()
    })
        {
            Text("DetailView")
        }
    }
}
详细视图

struct ContentView: View {
var body: some View {
    NavigationView {
        VStack {
            NavigationLink(destination: DetailView()) {
                Text("Show Detail View")
            }.navigationBarTitle("Navigation")
        }
    }
  }
}
struct DetailView: View {
@Environment(\.presentationMode) var presentationMode

var body: some View {
    VStack{
        Button(action: {
            self.presentationMode.wrappedValue.dismiss()
        })
        {
            Text("Root")
        }
    }
    .navigationBarTitle("DetailView", displayMode: .inline)
    .navigationBarItems(trailing:
        NavigationLink(destination: Help2()){
            Image(systemName: "plus").imageScale(.medium)
        }
    )
  }
}
struct Help2: View {
@Environment(\.presentationMode) var presentationMode

var body: some View {
    Button(action: {
        self.presentationMode.wrappedValue.dismiss()
    })
        {
            Text("DetailView")
        }
    }
}
帮助2

struct ContentView: View {
var body: some View {
    NavigationView {
        VStack {
            NavigationLink(destination: DetailView()) {
                Text("Show Detail View")
            }.navigationBarTitle("Navigation")
        }
    }
  }
}
struct DetailView: View {
@Environment(\.presentationMode) var presentationMode

var body: some View {
    VStack{
        Button(action: {
            self.presentationMode.wrappedValue.dismiss()
        })
        {
            Text("Root")
        }
    }
    .navigationBarTitle("DetailView", displayMode: .inline)
    .navigationBarItems(trailing:
        NavigationLink(destination: Help2()){
            Image(systemName: "plus").imageScale(.medium)
        }
    )
  }
}
struct Help2: View {
@Environment(\.presentationMode) var presentationMode

var body: some View {
    Button(action: {
        self.presentationMode.wrappedValue.dismiss()
    })
        {
            Text("DetailView")
        }
    }
}

一种可能的解决方案是将
导航链接
移到
之外。navigationBarItems

struct DetailView: View {
    @Environment(\.presentationMode) var presentationMode
    @State var isLinkActive = false

    var body: some View {
        VStack {
            Button(action: {
                self.presentationMode.wrappedValue.dismiss()
            })
            {
                Text("Root")
            }
        }
        .background(
            NavigationLink(destination: Help2(), isActive: $isLinkActive) {
                EmptyView()
            }
            .hidden()
        )
        .navigationBarTitle("DetailView", displayMode: .inline)
        .navigationBarItems(trailing:
            Button(action: {
                self.isLinkActive = true
            }) {
                Image(systemName: "plus").imageScale(.medium)
            }
        )
    }
}

我相信这将有助于你所寻找的我更新了我的标题。事实上,我正在寻找一个快速的答案,谢谢你。哇,非常好用!你知道我为什么会有奇怪的行为吗?@jh95它看起来像SwiftUI中的一个bug。如果在正文中放置NavigationLink,它将按预期工作。只需将其放在
navigationBarItems
中就会产生问题。