首页 > 解决方案 > SwiftUI:LazyVGrid 滚动时不刷新

问题描述

我有一个显示搜索结果的 LazyVGrid,当我在搜索字段中键入字符时,我执行 CoreData 获取请求并更新@Published属性。

问题:
LazyVGrid 按预期更新结果,除非它当前正在滚动:在这种情况下,它将等待滚动减速并在刷新之前结束。

作为比较,在 UIKit 中我可以使用 UICollectionView 并调用.reloadData()它,它会立即刷新网格,无论它是否滚动。

出于测试目的,我尝试了以下操作但没有成功:


贝娄是一些代码来帮助可视化这个东西是如何工作的

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 在滚动动画运行时刷新它的内容事件吗?否则对用户来说感觉没有反应。

标签: swiftuiswiftui-listswiftui-animationlazyvgridswiftui-layout

解决方案


推荐阅读