我遇到一个问题,以下代码导致我的应用程序挂起。所有这些都包含在我的应用程序顶层的导航堆栈中。
struct ParentView: View {
var body: some View {
List {
Section {
ForEach(0...5, id: \.self) { i in
NavigationLink {
ChildView()
} label: {
Text("Tap here")
}
}
}
}
}
}
struct ChildView: View {
@State var viewModel: ChildViewModel
// MARK: - Lifecycle
init() {
_viewModel = State(initialValue: ChildViewModel())
}
var body: some View {
Text("Hello, World!")
}
}
@Observable class ChildViewModel {
// Empty
}
我已将其隔离到
ChildView
类的初始化程序中,但无法弄清楚到底是什么导致它锁定。如果我将 ChildView
类更改为如下所示,它就可以正常工作:
struct ChildView: View {
// MARK: - Lifecycle
init() { }
var body: some View {
Text("Hello, World!")
}
}
我也尝试过使用
State(wrappedValue: viewModel)
,但没有成功。我也尝试过分析该应用程序,但它似乎实际上也无法找出挂起的原因。
您需要在导航视图闭包中添加导航链接代码块,如下所述:
struct ParentView: View {
var body: some View {
NavigationView {
List {
Section {
ForEach(0...5, id: \.self) { i in
NavigationLink {
ChildView()
} label: {
Text("Tap here")
}
}
}
}
}
}
}
这就是原因,
导航链接 (NavigationLink) 是专门设计用于在由 NavigationView 管理的导航层次结构上下文中工作的视图。它依赖 NavigationView 提供必要的导航基础设施,包括导航栏、动画和整体导航流程。
希望有帮助!