如何为同样动态调整大小的UICollectionView单元的大小设置动画?

时间:2019-04-22 06:55:51

标签: ios swift uicollectionview autolayout uicollectionviewcell

我无法为UICollectionView单元中的高度变化设置动画。单元格都包含带有文本的标签,因此单元格是动态大小的,并且它们使用“自动布局”。当我点击该单元格时,该单元格应扩展100点,并应将其他单元格向下推。

我已经看过这个问题: UICollectionView: Animate cell size change on selection

我也检查了这个,同样的问题: Animate uicollectionview cells on selection

似乎所有单元格的大小都是一致的,因为所有答案似乎都奏效,但忽略了大于估计大小的单元格。这应该是这样的:

Theoretical Layout

经过上述解决方案后,结果如下所示:

Problematic Layout

很难看到,但是最下面的两个单元格聚集到第二个单元格中。我已经开始使用它了,但是这依赖于重新加载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)

即使这样,视图仍会闪烁一秒钟并重置自身,因此您可以看到它再次布局。

0 个答案:

没有答案