Проблема ячейки выглядит следующим образом: http://i.imgur.com/5iaAiGQ.mp4 (красный цвет из cell.contentView)UICollectionViewCell - содержимое не анимировать вместе contentView
Вот код: https://github.com/nezhyborets/UICollectionViewContentsAnimationProblem
Текущий статус: Содержимое содержимого UICollectionViewCell не изменяется вместе с изменением кадрового содержимого. Он получает размер сразу без анимации.
Другие вопросы столкнулись при выполнении задачи: 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
.
UPDATE При печати imageView.constraints
внутри willDisplayCell
метода UICollectionView, он печатает пустой массив.
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: []
}
Для справки, когда 'executeBatchUpdates (nil)' вызывается в представлении коллекции с использованием UICollectionViewFlowLayout, контекст, переданный 'invalidateLayout (с:)', настроен с 'invalidateEverything' и' invalidateDataSourceCounts 'to' false', но 'invalidateFlowLayoutAttributes' и' invalidateFlowLayoutDelegateMetrics' установлены на 'true'. Эффект заключается в том, что объект компоновки потока запрашивает информацию о новом размере и пересматривает положение и размер элементов и представлений, не делая ничего недействительным. – jamesk