我无法为UICollectionView单元中的高度变化设置动画。单元格都包含带有文本的标签,因此单元格是动态大小的,并且它们使用“自动布局”。当我点击该单元格时,该单元格应扩展100点,并应将其他单元格向下推。
我已经看过这个问题: UICollectionView: Animate cell size change on selection
我也检查了这个,同样的问题: Animate uicollectionview cells on selection
似乎所有单元格的大小都是一致的,因为所有答案似乎都奏效,但忽略了大于估计大小的单元格。这应该是这样的:
经过上述解决方案后,结果如下所示:
很难看到,但是最下面的两个单元格聚集到第二个单元格中。我已经开始使用它了,但是这依赖于重新加载UICollectionView,这会使整个视图很快消失,然后再次出现。
我使用sizeForItemAt方法分别调整单元格的大小。这是在didSelectItemAt方法中,并且是我使其变得最接近的方法。
self.questions[indexPath.row].open = !self.questions[indexPath.row].open
collectionView.collectionViewLayout.invalidateLayout()
cell.bgViewHeightConstraint?.constant += 100
UIView.animate(
withDuration: 0.55,
delay: 0.0,
usingSpringWithDamping: 0.5,
initialSpringVelocity: 3.0,
options: UIView.AnimationOptions(),
animations: {
collectionView.layoutIfNeeded()
}, completion: nil)
即使这样,视图仍会闪烁一秒钟并重置自身,因此您可以看到它再次布局。