我举了一个例子来演示如何尝试将导航状态排除在视图之外。问题是,以某种方式将导航状态存储在ObservableObject中会破坏导航。点击"Show SecondDetailView“NavigationLink之后,SecondDetailView会显示很短的时间,然后视图就会弹出。
有人能解释为什么导航到SecondDetailView不起作用吗?
class NavigationCoordinator: ObservableObject {
@Published var showFirstDetailView: Bool = false
@Published var showSecondDetailView: Bool = false
@Published var showThirdDetailView: Bool = false
}
struct MainView: View {
@StateObject
var navigationCoordinator: NavigationCoordinator = NavigationCoordinator()
var body: some View {
NavigationView {
VStack {
Text("MainView").font(.headline)
Text("showFirstDetailView: \(navigationCoordinator.showFirstDetailView.description)")
NavigationLink(isActive: $navigationCoordinator.showFirstDetailView, destination: {FirstDetailView()}, label: {Text("Show FirstDetailView")})
}
}
.environmentObject(navigationCoordinator)
}
}
struct FirstDetailView: View {
@EnvironmentObject
var navigationCoordinator: NavigationCoordinator
var body: some View {
VStack {
Text("FirstDetailView").font(.headline)
Text("showSecondDetailView: \(navigationCoordinator.showSecondDetailView.description)")
NavigationLink(isActive: $navigationCoordinator.showSecondDetailView, destination: {SecondDetailView()}, label: {Text("Show SecondDetailView")})
}
}
}
struct SecondDetailView: View {
@EnvironmentObject
var navigationCoordinator: NavigationCoordinator
var body: some View {
VStack {
Text("SecondDetailView").font(.headline)
Text("showThirdDetailView: \(navigationCoordinator.showThirdDetailView.description)")
NavigationLink(isActive: $navigationCoordinator.showThirdDetailView, destination: {ThirdDetailView()}, label: {Text("Show ThirdDetailView")})
}
}
}
struct ThirdDetailView: View {
@EnvironmentObject
var navigationCoordinator: NavigationCoordinator
var body: some View {
Text("ThirdDetailView").font(.headline)
}
}
struct MainView_Previews: PreviewProvider {
static var previews: some View {
MainView()
}
}
发布于 2022-01-22 07:41:59
不知道为什么SecondDetailView
不能工作,内部代码对我们是不可用的。但是要“解决”这个问题,只需将.navigationViewStyle(.stack)
添加到NavigationView
中即可。为我工作。
https://stackoverflow.com/questions/70789942
复制相似问题