在iOS 14中,在Form上下文中返回后,NavigationLink似乎没有被取消选择。这也适用于Form Picker以及任何其他导致显示列表中的另一个View的内容(为显示的单元格提供突出显示上下文)。
我在iOS 13中没有注意到这个行为。
有没有一种方法可以在另一个视图关闭后取消选择突出显示的行?
示例代码:
struct ContentView: View {
var body: some View {
Form {
NavigationLink(destination: Text("Detail")) {
Text("Link")
}
}
}
}(不同)视觉示例:

发布于 2021-01-19 17:20:29
这肯定是List中的一个错误,目前,我的解决方法是通过更改id来刷新List,如下所示:
struct YourView: View {
@State private var selectedItem: String?
@State private var listViewId = UUID()
var body: some View {
List(items, id: \.id) {
NavigationLink(destination: Text($0.id),
tag: $0.id,
selection: $selectedItem) {
Text("Row \($0.id)")
}
}
.id(listViewId)
.onAppear {
if selectedItem != nil {
selectedItem = nil
listViewId = UUID()
}
}
}
}我根据这一点做了一个修饰符,你可以使用:
struct RefreshOnAppearModifier<Tag: Hashable>: ViewModifier {
@State private var viewId = UUID()
@Binding var selection: Tag?
func body(content: Content) -> some View {
content
.id(viewId)
.onAppear {
if selection != nil {
viewId = UUID()
selection = nil
}
}
}
}
extension View {
func refreshOnAppear<Tag: Hashable>(selection: Binding<Tag?>? = nil) -> some View {
modifier(RefreshOnAppearModifier(selection: selection ?? .constant(nil)))
}
}像这样使用它:
List { ... }
.refreshOnAppear(selection: $selectedItem)https://stackoverflow.com/questions/63934037
复制相似问题