我有一个collectionView,其中单元格向左对齐,单元格宽度基于字符串长度。类似于标记视图布局。
我查阅了有关如何使插入物动起来的快速教程:https://littlebitesofcocoa.com/306-customizing-collection-view-cell-insertion-animations
上一行的单元格会展开并缩回其原始位置。
我尝试插入没有动画的单元格,并且发生了同样的事情,这是由于左对齐的布局具有可变的单元格宽度。
这是在自定义UICollectionViewFlowLayout中将单元格向左对齐的代码:
pd.concat
并通过以下方式进行动画制作:
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
}
我希望它看起来像这样: https://imgur.com/cbWq6CI
但是它看起来像这样(实际记录): https://imgur.com/xfKZYnr
答案 0 :(得分:0)
我的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
,并且没有多余的动静。