SwiftUI: LazyVGrid не обновляется при прокрутке
У меня есть LazyVGrid, который отображает результаты поиска, когда я набираю символы в поле поиска, я выполняю запросы на выборку CoreData и обновляю
@Published
имущество.
Проблема:
LazyVGrid обновляет результаты, как и ожидалось, ЗА ИСКЛЮЧЕНИЕМ, если он в данный момент прокручивается: в этом случае он будет ждать, пока прокрутка замедлится и завершится, прежде чем обновляться.
Для сравнения, в UIKit я мог бы использовать UICollectionView и вызывать
.reloadData()
на нем он немедленно обновит сетку, независимо от того, прокручивается она или нет.
В целях тестирования я безуспешно пробовал следующее:
- Добавлять
.animation(nil)
модификатор представления - Добавлять
.id(UUID())
модификатор представления - Обновить
@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 обновлять свое содержимое, пока выполняется анимация прокрутки? В противном случае он не отвечает пользователям.