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
中就会产生问题。