UICollectionViewCell - содержимое не анимируется вместе с содержимым ячейки.
Проблема выглядит так:http://i.imgur.com/5iaAiGQ.mp4 (красный - это цвет cell.contentView)
Вот код:https://github.com/nezhyborets/UICollectionViewContentsAnimationProblem
Текущее состояние: Содержимое contentView UICollectionViewCell не анимируется вместе с изменением кадра contentView. Он получает размер сразу без анимации.
Другие проблемы, возникающие при выполнении задачи: ContentView также не анимировал наряду с изменением кадра ячейки, пока я не сделал это в подклассе UICollectionViewCell:
override func awakeFromNib() {
super.awakeFromNib()
//Because contentView won't animate along with cell
contentView.frame = bounds
contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
}
Другие заметки: Вот код, участвующий в анимации размера ячейки
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
self.selectedIndex = indexPath.row
collectionView.performBatchUpdates({
collectionView.reloadData()
}, completion: nil)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let isSelected = self.selectedIndex == indexPath.row
let someSize : CGFloat = 90 //doesn't matter
let sizeK : CGFloat = isSelected ? 0.9 : 0.65
let size = CGSize(width: someSize * sizeK, height: someSize * sizeK)
return size
}
Я получаю те же результаты при использованииcollectionView.setCollectionViewLayout(newLayout, animated: true)
и нет никакой анимации при использованииcollectionView.collectionViewLayout.invalidateLayout()
вместоreloadData() inside batchUpdates
.
ОБНОВИТЬ Когда я печатаюimageView.constraints
внутри UICollectionView'swillDisplayCell
метод, он печатает пустой массив.
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
for view in cell.contentView.subviews {
print(view.constraints)
}
//Outputs
//View: <UIImageView: 0x7fe26460e810; frame = (0 0; 50 50); autoresize = RM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x608000037280>>
//View constraints: []
}