swiftui - SwiftUI:LazyVGrid 滚动时不刷新
问题描述
我有一个显示搜索结果的 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 在滚动动画运行时刷新它的内容事件吗?否则对用户来说感觉没有反应。
解决方案
推荐阅读
- python - 如何在没有迁移命令的情况下在 Django admin 中添加表
- python - 为什么我的程序没有读取引用文件(文件名)中的第一行代码?
- angular - angular-CLI 6 项目间通信
- php - preg_replace 返回空字符串
- reactjs - React Router - 内容安全策略指令:“default-src 'self'
- awk - 在 bash 中使用 awk 过滤行
- java - RedisOperationsSessionRepository:无法发布会话警告的 SessionDestroyedEvent
- django - 如何计算 Django 中 model_set 的不同?
- r - 具有不同颜色异常值和几何文本编号标签的散点图
- apache - 将所有可能的域和子域永久重定向到不带 www 的 https (https://example.com)