【发布时间】:2020-05-22 12:05:07
【问题描述】:
由于带有presentationMode.wrappedValue.dismiss() 的 iOS 13.4 和 Xcode 11.4 存在一些问题,我正在寻找一种以编程方式返回的替代方法。我从 MScottWaller 找到了这个解决方案:
iOS SwiftUI: pop or dismiss view programmatically
不幸的是,在我的情况下它不起作用:
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 位于 navigationBarItem 内,我无法从 DetailView 返回。我不知道这是一个错误还是其他原因导致 NavigationLink 在 navigationBarItem 中无法以相同的方式工作。
作为一种解决方法,我在视图内使用带有空 NavigationLink 的这个变体。它有效,但我不喜欢这样:
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 不能在 navigationBarItem 内正确工作?
【问题讨论】:
-
你是在真机上测试吗?
-
根据我对
NavigationView/NavigationLinkAPI 描述(和实际行为观察)的理解,后者必须在导航堆栈层次结构中,而NavigationBar在上方导航堆栈。跨度> -
您确定在 navigationBarItems 中使用 NavigationLink 是合适的或受支持的用例吗?
-
@Asperi 这是可能的,但为什么 NavigationLink 完全可以在 NavigationBar 中工作?
标签: swiftui-navigationlink swiftui