SwiftUI导航到NavigationView堆栈的底部
我有以下设置,其中父视图包含一个NavigationView,它显示一系列页面,a、B和C。在第C页上有一个按钮隐藏导航视图。我希望这样,当导航视图再次显示时,它会自动导航到页面A,但是我不确定如何使用SwiftUI实现这一点,如何实现这一点SwiftUI导航到NavigationView堆栈的底部,swiftui,reset,navigationview,Swiftui,Reset,Navigationview,我有以下设置,其中父视图包含一个NavigationView,它显示一系列页面,a、B和C。在第C页上有一个按钮隐藏导航视图。我希望这样,当导航视图再次显示时,它会自动导航到页面A,但是我不确定如何使用SwiftUI实现这一点,如何实现这一点 struct ParentView: View { @State var showNavigation:Bool = true var body: some View { ZStack { Butto
struct ParentView: View {
@State var showNavigation:Bool = true
var body: some View {
ZStack {
Button(action: {
self.showNavigation = true
}) {
Text("Show navigation")
}
NavigationView {
NavigationLink(destination: ChildA(showNavigation: $showNavigation)) {
Text("Go to A")
}
}.opacity(showNavigation ? 1.0 : 0.0)
}
}
}
struct ChildA: View {
@Binding var showNavigation:Bool
var body: some View {
VStack {
Text("A")
NavigationLink(destination: ChildB(showNavigation: $showNavigation)) {
Text("Go to B")
}
}
}
}
struct ChildB: View {
@Binding var showNavigation:Bool
var body: some View {
VStack {
Text("B")
NavigationLink(destination: ChildC(showNavigation: $showNavigation)) {
Text("Go to C")
}
}
}
}
struct ChildC: View {
@Binding var showNavigation:Bool
var body: some View {
VStack {
Text("C")
Button(action: {
self.showNavigation = false
}) {
Text("Hide Navigation")
}
}
}
}
这里的设置并不复杂。一件事是对于任何中间视图,都必须设置.isDetailLinkfalse。否则,它们将在复卷期间保留
struct ParentView: View {
@State var showNavigation:Bool = true
@State var isActive:Bool = true
var body: some View {
ZStack {
Button(action: {
self.showNavigation = true
}) {
Text("Show navigation")
}
NavigationView {
NavigationLink.init(destination: ChildA(showNavigation: $showNavigation, isActive: $isActive ), isActive: $isActive){
Text("Go to A")
}
}.opacity(showNavigation ? 1.0 : 0.0)
}
}
}
struct ChildA: View {
@Binding var showNavigation:Bool
@Binding var isActive:Bool
@State var isNextActive:Bool = false
var body: some View {
VStack {
Text("A")
NavigationLink(destination: ChildB(showNavigation: $showNavigation, isActive: $isNextActive), isActive: $isNextActive) {
Text("Go to B")
}.isDetailLink(false)
}.onReceive(Just(isNextActive)) { isNextActive in
if isNextActive == false && (!self.showNavigation) {
self.isActive = false
}
}
}
}
struct ChildB: View {
@Binding var showNavigation:Bool
@Binding var isActive:Bool
@State var isNextActive:Bool = false
var body: some View {
VStack {
Text("B")
NavigationLink(destination: ChildC(showNavigation: $showNavigation, isActive: $isNextActive), isActive: $isNextActive) {
Text("Go to C")
}.isDetailLink(false)
}.onReceive(Just(isNextActive)) { isNextActive in
if isNextActive == false && (!self.showNavigation) {
DispatchQueue.main.async {
self.isActive = false}
}
}
}
}
struct ChildC: View {
@Binding var showNavigation:Bool
@Binding var isActive:Bool
var body: some View {
VStack {
Text("C")
Button(action: {
self.showNavigation = false
self.isActive = false
}) {
Text("Hide Navigation")
}
}
}
}
这里的设置并不复杂。一件事是对于任何中间视图,都必须设置.isDetailLinkfalse。否则,它们将在复卷期间保留
struct ParentView: View {
@State var showNavigation:Bool = true
@State var isActive:Bool = true
var body: some View {
ZStack {
Button(action: {
self.showNavigation = true
}) {
Text("Show navigation")
}
NavigationView {
NavigationLink.init(destination: ChildA(showNavigation: $showNavigation, isActive: $isActive ), isActive: $isActive){
Text("Go to A")
}
}.opacity(showNavigation ? 1.0 : 0.0)
}
}
}
struct ChildA: View {
@Binding var showNavigation:Bool
@Binding var isActive:Bool
@State var isNextActive:Bool = false
var body: some View {
VStack {
Text("A")
NavigationLink(destination: ChildB(showNavigation: $showNavigation, isActive: $isNextActive), isActive: $isNextActive) {
Text("Go to B")
}.isDetailLink(false)
}.onReceive(Just(isNextActive)) { isNextActive in
if isNextActive == false && (!self.showNavigation) {
self.isActive = false
}
}
}
}
struct ChildB: View {
@Binding var showNavigation:Bool
@Binding var isActive:Bool
@State var isNextActive:Bool = false
var body: some View {
VStack {
Text("B")
NavigationLink(destination: ChildC(showNavigation: $showNavigation, isActive: $isNextActive), isActive: $isNextActive) {
Text("Go to C")
}.isDetailLink(false)
}.onReceive(Just(isNextActive)) { isNextActive in
if isNextActive == false && (!self.showNavigation) {
DispatchQueue.main.async {
self.isActive = false}
}
}
}
}
struct ChildC: View {
@Binding var showNavigation:Bool
@Binding var isActive:Bool
var body: some View {
VStack {
Text("C")
Button(action: {
self.showNavigation = false
self.isActive = false
}) {
Text("Hide Navigation")
}
}
}
}
您可以将isActive添加到NavigationLink以获得对导航堆栈的更多控制。有关更多详细信息,请转至。您可以将isActive添加到NavigationLink以获得对导航堆栈的更多控制。有关更多详细信息,请访问