如何解决SwiftUI:LazyVGrid 在滚动时不刷新
我有一个显示搜索结果的 LazyVGrid,当我在搜索字段中输入字符时,我会执行 CoreData 获取请求并更新 @Published
属性。
问题:
LazyVGrid 按预期更新结果,除非它当前正在滚动:在这种情况下,它将等待滚动减速并在刷新之前结束。
为了进行比较,在 UIKit 中,我可以使用 UICollectionView 并在其上调用 .reloadData()
,无论它是否滚动,它都会立即刷新网格。
出于测试目的,我尝试了以下操作但没有成功:
- 添加
.animation(nil)
视图修饰符 - 添加
.id(UUID())
视图修饰符 - 当我想刷新视图时更新一个
@State var dummy = ""
,并在视图的主体中使用它,例如:Text(dummy)
Bellow 是一些代码来帮助可视化这个东西是如何工作的
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 在滚动动画运行时刷新其内容事件吗?否则会让用户感觉没有反应。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。