ios - 执行BatchUpdates时UICollectionView奇怪的动画
问题描述
当调用具有performBatchUpdates
的水平滚动条时,它会执行一个相当奇怪的动画。UICollectionView
contentOffset.x > 0
我使用示例单元格重新创建了错误,该单元格准确显示了我们在应用程序中遇到的错误。当根本没有要执行的更改时也会发生这种情况performBatchUpdates
。完成后,里面的项目UICollectionView
都是正确的,所以只是一个动画问题。
是否有人已经面临这个问题并有解决方案?
我的ViewController.swift
:
class CollectionViewCell: UICollectionViewCell {
@IBOutlet var label: UILabel!
}
class ViewController: UIViewController {
@IBOutlet private var collectionView: UICollectionView!
private var items: [Int] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
override func viewDidLoad() {
super.viewDidLoad()
let layout = UICollectionViewFlowLayout()
layout.estimatedItemSize = CGSize(width: 1, height: 1)
layout.scrollDirection = .horizontal
collectionView.collectionViewLayout = layout
collectionView.dataSource = self
collectionView.delegate = self
collectionView.contentInset = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 10)
collectionView.showsHorizontalScrollIndicator = false
}
}
extension ViewController: UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
items.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as? CollectionViewCell
cell?.label.text = items[indexPath.row].description
return cell ?? UICollectionViewCell()
}
}
extension ViewController: UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
items.remove(at: indexPath.row)
collectionView.performBatchUpdates({
self.collectionView.deleteItems(at: [indexPath])
}, completion: nil)
}
}
在此处下载示例项目: https ://wetransfer.com/downloads/74454a6b9df114529ba3a26b7b9488ab20200720141429/05eb4d
解决方案
您必须itemSize
为您设置 collectionView 单元格:
layout.itemSize = CGSize(width: 44, height: 44)
代替(或另外):
layout.estimatedItemSize = CGSize(width: 1, height: 1)
有关估计和何时需要的更多信息:
https ://developer.apple.com/documentation/uikit/uicollectionviewflowlayout/1617709-estimateditemsize
和 itemSize:
https ://developer.apple.com/documentation/uikit/uicollectionviewflowlayout/1617711-itemsize
不客气!
推荐阅读
- jquery - Attempting to send binary data through $.ajax
- angular - angular 6 unit testing on http service errors
- multithreading - 运行空间性能提升低于预期
- java - 如果尚不存在,如何使用 AWS Java sdk 从 S3 存储桶中的字节创建文件
- r - R没有正确计算余数
- ios - 如何在另一个viewController的tableViewCells中呈现保存在Realm中的数据?
- cypress - 点击后cypress记录多个url重定向
- python - Python:- 在 else 语句之后返回 None 并且不使用 else 有不同的效果吗?
- ios - UITableView 上的 Swift 信号 SIGABRT 错误
- java - Wiremock 录制——在录制模式下“即时”重写响应