我有一个显示搜索结果的 LazyVGrid,当我在搜索字段中键入字符时,我执行 CoreData 获取请求并更新@Published
属性。
问题:
LazyVGrid 按预期更新结果,除非它当前正在滚动:在这种情况下,它将等待滚动减速并在刷新之前结束。
作为比较,在 UIKit 中我可以使用 UICollectionView 并调用.reloadData()
它,它会立即刷新网格,无论它是否滚动。
出于测试目的,我尝试了以下操作但没有成功:
- 添加
.animation(nil)
视图修饰符 - 添加
.id(UUID())
视图修饰符 - 当我想刷新视图时更新 a
@State var dummy = ""
,并在视图的主体中使用它,例如:Text(dummy)
贝娄是一些代码来帮助可视化这个东西是如何工作的
struct SearchResultGroup: Hashable {
let title: String?
let list: [Foo] // Foo is a NSManagedObject class representation
}
class SearchResultsHolder: ObservableObject {
@Published var results: [SearchResultGroup] = []
}
struct SearchResultsSV: View {
@ObservedObject var searchResultsHolder: SearchResultsHolder // searchResults.results property gets updated externally
var body: some View {
LazyVGrid(columns: [GridItem(.adaptive(minimum: 30))]) {
ForEach(searchResultsHolder.results, id: \.self) { section in
Section(header: Text( section.title ?? ""))
, content: {
ForEach(section.list, id: \.id) { foo in
Text(foo.bar)
}
})
}
}
}
知道如何让 LazyVGrid 在滚动动画运行时刷新它的内容事件吗?否则对用户来说感觉没有反应。