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 обновлять свое содержимое, пока выполняется анимация прокрутки? В противном случае он не отвечает пользователям.

0 ответов

Другие вопросы по тегам