SwiftUI NavigationView,如果 NavigationLink 位于 NavigationBarItem 内,则返回 [英] SwiftUI NavigationView, going back if NavigationLink is inside a NavigationBarItem
问题描述
由于 iOS 13.4 和 Xcode 11.4 存在一些问题,presentationMode.wrappedValue.dismiss()
我正在寻找一种替代方法以编程方式返回.我从 MScottWaller 找到了这个解决方案:
As there are some problems with iOS 13.4 and Xcode 11.4 with presentationMode.wrappedValue.dismiss()
I am looking for an alternative approach to go back programmatically. I found this solution from MScottWaller:
不幸的是,就我而言,它不起作用:
Unfortunately, in my case it does not work:
struct MasterView: View {
@State private var showDetail = false
var body: some View {
VStack {
Text("MasterView")
.navigationBarItems(trailing: HStack {
NavigationLink(destination: DetailView(showSelf: $showDetail), isActive: $showDetail) {
Image(systemName: "tag")
.padding(.leading, 4)
}
})
}
}
}
struct DetailView: View {
@Binding var showSelf: Bool
var body: some View {
Button(action: {
self.showSelf = false
}) {
Text("Pop")
}
}
}
如果 NavigationLink 在导航栏项内,我将无法从我的 DetailView 返回.我不知道是 bug 还是其他原因导致 NavigationLink 在 navigationBarItem 中无法以相同方式工作.
If the NavigationLink is inside a navigationBarItem, I can't go back from my DetailView. I don't know if it is a bug or there are other reasons why NavigationLink does not work in the same way inside a navigationBarItem.
作为一种解决方法,我使用此变体在视图中带有一个空的 NavigationLink.它有效,但我不喜欢这样:
As a workaround I use this variant with a empty NavigationLink inside the view. It works, but I don't like this:
struct MasterView: View {
@State private var showDetail = false
var body: some View {
VStack {
Text("MasterView")
NavigationLink(destination: DetailView(showSelf: $showDetail), isActive: $showDetail) {
EmptyView()
}
.navigationBarItems(trailing: HStack {
Button(action: { self.showDetail.toggle() }) {
Image(systemName: "tag")
.padding(.leading, 4)
}
})
}
}
}
有什么想法为什么 NavigationLink 不能在导航栏项内正确工作吗?
Any ideas why the NavigationLink does not correct work inside a navigationBarItem?
推荐答案
这是一个 iOS 错误.
It's an iOS bug.
https://forums.developer.apple.com/thread/125937
解决方法是切换隐藏在导航栏外的 NavigationLink:
The work around is to toggle a NavigationLink hidden outside of nav bar:
struct Parent: View {
@State private var showingChildView = false
var body: some View {
NavigationView {
VStack {
Text("Hello World")
NavigationLink(destination: Child(),
isActive: self.$showingChildView)
{ Text("HiddenLink").hidden() }
}
.navigationBarItems(trailing: Button(action:{ self.showingChildView = true }) { Text("Next") })
}
}
}
这篇关于SwiftUI NavigationView,如果 NavigationLink 位于 NavigationBarItem 内,则返回的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!