Musiałem wykonać jakąś akcję na wszystkich widocznych komórkach, gdy widok kolekcji zostanie załadowany, zanim będzie widoczny dla użytkownika, użyłem:
public func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
if shouldPerformBatch {
self.collectionView.performBatchUpdates(nil) { completed in
self.modifyVisibleCells()
}
}
}
Zwróć uwagę, że zostanie to wywołane podczas przewijania widoku kolekcji, więc aby temu zapobiec, dodałem:
private var souldPerformAction: Bool = true
aw samej akcji:
private func modifyVisibleCells() {
if self.shouldPerformAction {
// perform action
...
...
}
self.shouldPerformAction = false
}
Akcja będzie nadal wykonywana wiele razy, ponieważ liczba widocznych komórek w stanie początkowym. ale we wszystkich tych wywołaniach będziesz mieć taką samą liczbę widocznych komórek (wszystkie). A flaga logiczna uniemożliwi ponowne uruchomienie po rozpoczęciu interakcji użytkownika z widokiem kolekcji.