Как синхронизировать анимацию раскрытия ячейки и обновления леяута UICollectionView?
Код проекта для примера (можно просто вставить в пустой проект): https://gist.github.com/smocer/e8c4bb3c5465c1a01bcf6aa33e0fd9dc
Проблема в том, что анимации раскрытия ячейки и сдвига других ячеек не синхронизированы (раскрытие происходит мнгновенно, а леяут обновляется плавно):
Любопытно, что почему-то анимация "схлопывания" происходит плавно, параллельно сдвиганию ячеек обратно.
Вопрос в том, как достичь одновременной анимации раскрытия/схлопывания ячейки и сдвига других ячеек?
UPD: Есть еще вот такой способ
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
isExpanded[indexPath.item].toggle()
collectionView.collectionViewLayout.invalidateLayout()
UIView.animate(withDuration: 0.25) {
collectionView.layoutIfNeeded()
}
}
С ним данная ячейка анимируется правильно, но появляется другая проблема - некоторые ячейки с краю перемещаются без анимации вообще: https://i.imgur.com/78TOAL1.gif
Ответы (1 шт):
Я посмотрел ваш код, в данном случае сработало решение, предложенное здесь
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
isExpanded[indexPath.item].toggle()
// https://stackoverflow.com/a/35996178/3004003
collectionView.performBatchUpdates({}){_ in }
}
