Swiftui 使用NavigationView进行交叉导航
我有以下结构Swiftui 使用NavigationView进行交叉导航,swiftui,Swiftui,我有以下结构 enum Page { case chapter1 case chapter2 } struct ContentView: View { @State var page: Page? = nil var body: some View { NavigationView { VStack { NavigationLink(destination: Chapter1(page: s
enum Page {
case chapter1
case chapter2
}
struct ContentView: View {
@State var page: Page? = nil
var body: some View {
NavigationView {
VStack {
NavigationLink(destination: Chapter1(page: self.$page),
tag: .chapter1,
selection: self.$page) {
Text("Chapter 1")
}
NavigationLink(destination: Chapter2(page: self.$page),
tag: .chapter2,
selection: self.$page) {
Text("Chapter 2")
}
}
}
}
}
struct Chapter1: View {
@Binding var page: Page?
var body: some View {
VStack {
Button("Back to Overview") {
self.page = nil
}
Button("Chapter 2") {
self.page = .chapter2
}
}
}
}
struct Chapter2: View {
@Binding var page: Page?
var body: some View {
VStack {
Button("Back to Overview") {
self.page = nil
}
}
}
}
当我从第一章直接转到第二章时,它中断了第二章的反向链接
首先,原因是什么
其次,是否有一种方法可以使用不同类型的动画从第1章
过渡到第2章
,而不是重复前后翻转?基于每个级别的导航视图
管理器链接,因此修改其他堆栈级别可能会导致意外行为
下面是所描述用例的解决方案。使用Xcode 11.4/iOS 13.4进行测试
struct TestNavigationByEnum: View {
@State var page: Page? = nil
var body: some View {
NavigationView {
VStack {
NavigationLink(destination: Chapter1(page: self.$page),
tag: .chapter1,
selection: self.$page) {
Text("Chapter 1")
}.isDetailLink(false) // important !!
NavigationLink(destination: Chapter2(page: self.$page),
tag: .chapter2,
selection: self.$page) {
Text("Chapter 2")
}.isDetailLink(false)
}
}
}
}
struct Chapter1: View {
@Binding var page: Page?
var body: some View {
VStack {
Button("Back to Overview") {
self.page = nil
}
// own level link
NavigationLink(destination: Chapter2(page: self.$page)) {
Text("Chapter 2")
}.isDetailLink(false)
}
}
}