swift - 如何在不破坏其他单元格的情况下为集合视图插入设置动画?
问题描述
我有一个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
,没有额外的动作。
推荐阅读
- amazon-web-services - AWS 上的 Lambda 函数在 EC2 关闭之前发送通知
- java - 如何将变量传递给Java中的不同线程
- asp.net-web-api - 当 API 版本在 URL 中时,为什么 Swagger 需要版本请求参数?
- php - 无法在 Windows 中将 PHP 7.1 升级到 PHP 7.2
- javascript - ES6 模块,什么算作第一次导入?
- reactjs - 未捕获的 ReferenceError:未定义 _asyncToGenerator
- mysql - 显示用户详细信息,在他之后和之前加入的用户总数
- python - 修改后未通过 setup.py 重新安装 Cython 扩展
- javascript - algoliasearch() 没有签名调用
- python - 在scrapy python中更改抓取数据的顺序