我有一个LazyVGrid
里面一个NavigationView
.
NavigationView {
ScrollView {
LazyVGrid(columns: columns) {
ForEach(items) { item in
NavigationLink(tag: item, selection: $displayedItem) {
DetailView(item)
} label: {
GridItemView(item)
}
}
}
}
}
引用的变量在视图上定义如下:
@State var displayedItem: Item?
let columns: [GridItem] = Array(repeating: .init(.flexible()), count: 2)
现在我想显示特定项目的详细视图。我通过简单地将此项分配给displayedItem
财产:
func showDetailView(for item: Item) {
displayedItem = item
}
当相应的项目在屏幕上可见时,这非常有用LazyVGrid
当我调用这个函数时。但是,当该项目不可见时,我首先需要滚动到该项目NavigationLink
开火。我知道为什么会发生这种情况(因为这些项目是延迟加载的,这是一个lazy毕竟网格),但我不知道如何制作LazyVGrid
当我需要时加载特定项目。
我尝试过的:
我还尝试通过包装整个内容以编程方式滚动到目标项目ScrollView
里面一个ScrollViewReader
并附加以下修饰符:
.onChange(of: displayedItem) { item in
if let item = item {
scrollProxy.scrollTo(item.id)
}
}
不幸的是,这也存在同样的问题:在加载项目之前,滚动到给定项目不起作用。
问题:
有什么办法可以让这个工作,即触发一个NavigationLink
对于当前在中不可见的项目LazyVGrid
? (这对我来说很重要,因为我需要此功能来深层链接到特定项目的DetailView
.)