#ios #uicollectionview #uicollectionviewflowlayout
Вопрос:
моя настройка UICollectionViewFlowLayout
выглядит так:
override func prepare() { super.prepare() // compute all cell frame }
функция prepare() будет вызвана после изменения любых данных(перезагрузка, вставка, удаление), и все ячейки будут пересчитаны.
итак, как определить обновление или перезагрузку для сокращения времени вычислений?
Комментарии:
1. Вы имеете в виду, что не хотите пересчитывать, если в этом нет необходимости? Можете ли вы реализовать a
isRecomputationNeeded
и протестировать это в первуюprepare
очередь ? Нравитсяif !isRecomputationNeeded() { return }
2. @MedoPaw да, но как это реализовать
isRecomputationNeeded
? Из документацииprepare(forCollectionViewUpdates: updateItems)
вызывается при каждом обновлении(удаляет/вставляет…) вUICollectionView
, но этот метод вызывается послеprepare()
.3. Да
prepare
вызывается каждый раз, но, согласно документации, реализация по умолчанию ничего не делает. Поэтому, если вы можете реализоватьisRecomputationNeeded
и поместитьif !isRecomputationNeeded() { return }
код в начало, то повторное вычисление не произойдет, если в этом нет необходимости.4. И каждый раз вы должны решать, требуется ли повторное вычисление. Это связано с вашей бизнес-логикой. например , скажите, что если
dataSource
останется прежним, то не потребуется перерасчет, верно? Но на самом деле это вам решать.