如何在不干扰其他单元格的情况下设置集合视图插入的动画



我有一个collectionView,其中单元格向左对齐,单元格宽度基于字符串长度。类似于标记视图布局。

我查阅了一个关于如何制作插入动画的快速教程:https://littlebitesofcocoa.com/306-customizing-collection-view-cell-insertion-animations

上一行的单元格展开并缩回到其原始位置。

我试着在没有动画的情况下插入单元格,同样的事情也发生了,这是由于单元格宽度可变的左对齐布局。

以下是在自定义UICollectionViewFlowLayout:中将单元格向左对齐的代码

override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
let attributes = super.layoutAttributesForElements(in: rect)
var leftMargin = sectionInset.left
var maxY: CGFloat = -1.0
attributes?.forEach { layoutAttribute in
if layoutAttribute.frame.origin.y >= maxY {
leftMargin = sectionInset.left + 8
}
layoutAttribute.frame.origin.x = leftMargin
leftMargin += layoutAttribute.frame.width + minimumInteritemSpacing
maxY = max(layoutAttribute.frame.maxY , maxY)
}
return attributes
}

和动画通过:

override func initialLayoutAttributesForAppearingItem(at itemIndexPath: IndexPath) -> UICollectionViewLayoutAttributes? {
let attributes = super.initialLayoutAttributesForAppearingItem(at: itemIndexPath)
if insertingIndexPaths.contains(itemIndexPath) {
attributes?.alpha = 0.0
attributes?.transform = CGAffineTransform(
translationX: 0,
y: 500
)
}
return attributes
}

我原以为它会是这样的:https://imgur.com/cbWq6CI

但它看起来是这样的(实际录音):https://imgur.com/xfKZYnr

我的UICollectionViewFlowLayout子类中有一个这样的代码:

required init(minimumInteritemSpacing: CGFloat = 8, minimumLineSpacing: CGFloat = 8, sectionInset: UIEdgeInsets = .zero) {
super.init()
estimatedItemSize = UICollectionViewFlowLayout.automaticSize
self.minimumInteritemSpacing = minimumInteritemSpacing
self.minimumLineSpacing = minimumLineSpacing
self.sectionInset = sectionInset
sectionInsetReference = .fromSafeArea
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

我刚卸下estimatedItemSize = UICollectionViewFlowLayout.automaticSize,没有多余的动作。

相关内容

最新更新