SwiftUI Navigation link 在过滤 ForEach 时不起作用
SwiftUI Navigation link doesn't work when filtering ForEach
我有一个分段选择器来过滤 ForEach 中的列表行,但 NavigationLinks 在过滤时停止工作,它们有点击动画但从不改变视图。我在甲板上使用 CoreData。当我点击标准中的行时它们正常工作,然后我点击 Wild 并且 NavigationLinks 仍然有效但是当我回到标准时会发生这种情况:
这是我的代码:
ForEach(decks.filter{[=11=].format == formats[selectedFormat]}, id: \.self) { deck in
HStack {
ZStack {
DeckRow(deck: deck)
NavigationLink(destination: DeckView()) {
EmptyView()
}
}
}
}
你还必须给你的 deckview "deck",这样它才能显示正确的 deckview
提供的代码不可测试,但通过阅读假设问题的原因是在平等导航 links 中,请尝试以下操作(这将导致在过滤时更新 links)
ZStack {
DeckRow(deck: deck)
NavigationLink(destination: DeckView()) {
EmptyView()
}.id(deck) // << here !!
}
或者,正如预期的那样,使 DeckView
依赖于 deck
,如 DeckView(model: deck)
,这也使每个导航 link 唯一且可在过滤器上刷新.
我有一个分段选择器来过滤 ForEach 中的列表行,但 NavigationLinks 在过滤时停止工作,它们有点击动画但从不改变视图。我在甲板上使用 CoreData。当我点击标准中的行时它们正常工作,然后我点击 Wild 并且 NavigationLinks 仍然有效但是当我回到标准时会发生这种情况:
这是我的代码:
ForEach(decks.filter{[=11=].format == formats[selectedFormat]}, id: \.self) { deck in
HStack {
ZStack {
DeckRow(deck: deck)
NavigationLink(destination: DeckView()) {
EmptyView()
}
}
}
}
你还必须给你的 deckview "deck",这样它才能显示正确的 deckview
提供的代码不可测试,但通过阅读假设问题的原因是在平等导航 links 中,请尝试以下操作(这将导致在过滤时更新 links)
ZStack {
DeckRow(deck: deck)
NavigationLink(destination: DeckView()) {
EmptyView()
}.id(deck) // << here !!
}
或者,正如预期的那样,使 DeckView
依赖于 deck
,如 DeckView(model: deck)
,这也使每个导航 link 唯一且可在过滤器上刷新.