UICollectionView
(или UITableView
) методы делегата и источника данных, имеющие возвращаемое значение, должны иметь значение, возвращаемое в основной очереди, в которой оно было вызвано, и это возвращаемое значение должно вычисляться мгновенно (или как можно ближе к нему) мгновенно). Любая задержка вызывает задержку в представлении сбора (или представлении таблицы).
Одним из решений является сохранение размеров ячеек как части вашей модели данных. Первоначально заполните размеры с начальным предполагаемым размером. Пусть ваш sizeForItemAt
вернет любой размер, который у вас есть в вашей модели данных.
Тем временем, запустите процесс в фоновом режиме (для всех ячеек или сделайте это индивидуально для каждой ячейки, когда это необходимо), чтобы вычислить реальный размер ячейки (я). Получив реальные значения, обновите модель данных и перезагрузите эту ячейку в главной очереди.