[英]SwiftUI NavigationView jumps back and forth with NavigationLink in ForEach inside List
我试图在 NavigationView 的列表的每一行中包含一个动态的导航链接列表。 但是,每当我点击其中一个链接时,导航都会来回跳转几次。
是什么导致来回导航? 是否可以使用 SwiftUI 以其他方式表达此模式以避免此问题?
import SwiftUI
struct MonthData: Hashable, Codable, Identifiable {
var id: Int
var name: String
var tasks: [TaskData]
}
struct TaskData: Hashable, Codable, Identifiable {
var id: Int
var name: String
}
let months: [MonthData] = [
MonthData(id: 1, name: "January", tasks: []),
MonthData(id: 2, name: "February", tasks: [
TaskData(id: 21, name: "Do something"),
TaskData(id: 22, name: "Do something else")
])
]
struct FooView: View {
var body: some View {
NavigationView {
List(months) { month in
VStack {
ForEach(month.tasks) { task in
NavigationLink(
destination: Text(task.name)
) {
Text(task.name)
}
}
}
}
.navigationBarTitle(Text("Months"))
}
}
}
struct FooView_Previews: PreviewProvider {
static var previews: some View {
FooView()
}
}
它来回移动,因为在您的 1 月示例中,单元格上没有链接,因为 1 月没有任务。 另一方面,二月份有两个导航链接(每个任务一个),这就是它进出的原因。 您需要首先考虑您的布局和导航。 但最终您需要为每个单元格添加一项,有些单元格可能会导航,有些可能不会,具体取决于您的逻辑。 但是每个列表项最多应该有一个导航链接。 这篇文章可能会有所帮助: SwiftUI - 嵌套列表
这是固定的变体。 使用 Xcode 12 / iOS 14 进行测试。
struct FooView: View {
var body: some View {
NavigationView {
List {
ForEach(months) { month in
Section {
ForEach(month.tasks) { task in
NavigationLink(
destination: Text(task.name)
) {
Text(task.name)
}
}
}
}
}
.navigationBarTitle(Text("Months"))
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.