为什么UICollectionView ReloadItems总是为每个项目调用CellForItemAt两次



为什么UICollectionView ReloadItems总是为每个项目调用CellForItemAt两次?如何防止重复呼叫?如何防止花费双倍资源重新加载选定单元格?ReloadData((只调用CellForItemAt一次。但是,当只需要更新2-3个项目时,重新加载所有行和节都是浪费资源。

代码示例可以是UICollectionView的任何内容。例如:

import UIKit
class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
@IBOutlet weak var collectionView: UICollectionView!
@IBAction func onTestButton(_ sender: Any) {
print("test button tapped")
collectionView.reloadItems(at: [IndexPath(item: 2, section: 0)])
}
let reuseIdentifier = "my cell" 
var items = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
override func viewDidLoad() {
collectionView.delegate = self
collectionView.dataSource = self
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.items.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! MyCollectionViewCell
cell.myLabel.text = self.items[indexPath.row]
cell.backgroundColor = UIColor.cyan
print("cell for item at (indexPath.row)")
return cell
}
}

当敲击";"测试按钮";,控制台输出为:

test button tapped
cell for item at 2
cell for item at 2

但我需要重新加载";2〃处的项目;只有一次,我不想使用reloadData((重新加载所有项目。

您不应该对系统调用collectionView(_:cellForItemAt:)方法的频率做出任何假设。只需在它要求你时构建并返回单元格。如果它有时要求你两次相同的单元格,只需给它两次相同单元格。

集合视图和表视图要求用户在滚动时经常返回单元格。collectionView(_:cellForItemAt:)方法(或等效的表视图方法(需要快速。它不应该进行网络请求,甚至不应该从磁盘解压缩JPEG或压缩的PNG图像,除非你缓存结果。

相关内容

  • 没有找到相关文章

最新更新