设置视图调节isDetailLink
到false
一个NavigationLink
关键是让弹出到根的工作。isDetailLink
是true
默认设置,并且适用于包含的View。例如,在iPad横向上,分割视图是分开的,并isDetailLink
确保目标视图将显示在右侧。因此,设置isDetailLink
为false
意味着目标视图将始终被推送到导航堆栈上。因此总是可以弹出。
连同设置isDetailLink
为false
onNavigationLink
,将isActive
绑定传递到每个后续的目标视图。最后,当您要弹出到根视图时,将该值设置为false
,它将自动弹出所有内容:
import SwiftUI
struct ContentView: View {
@State var isActive : Bool = false
var body: some View {
NavigationView {
NavigationLink(
destination: ContentView2(rootIsActive: self.$isActive),
isActive: self.$isActive
) {
Text("Hello, World!")
}
.isDetailLink(false)
.navigationBarTitle("Root")
}
}
}
struct ContentView2: View {
@Binding var rootIsActive : Bool
var body: some View {
NavigationLink(destination: ContentView3(shouldPopToRootView: self.$rootIsActive)) {
Text("Hello, World #2!")
}
.isDetailLink(false)
.navigationBarTitle("Two")
}
}
struct ContentView3: View {
@Binding var shouldPopToRootView : Bool
var body: some View {
VStack {
Text("Hello, World #3!")
Button (action: { self.shouldPopToRootView = false } ){
Text("Pop to root")
}
}.navigationBarTitle("Three")
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}