CollectionViewController
中我做了:
override func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1 }
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 2 }
我看到两个单元格,但是如果我在下面的代码中打印indexPath.row(仍然在同一个类中),我看到0 1 0 1
。为什么不只有一个0 1
,因为我在一个部分只有两个单元格?
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! CollectionViewCell
print(indexPath.row)
return cell
}
答案 0 :(得分:1)
cellForItemAt
被召唤四次。您的numberOfItemsInSection
是2的硬编码。当视图加载cellForItemAt
被调用两次(每个单元格一次)。当您从reloadData()
关闭时调用DispatchQueue.main.async
时,它会再次被调用两次。
已更新 - 如何避免第一次通话:
您需要将单元格数据存储在数组中,并且只在调用reloadData()
之前填充数组。因此,首次加载视图时,数组将为空。
var yourArray = [YourObject]() //Empty Array
//..
DispatchQueue.main.async {
//append your two items to the yourArray
yourArray.append(/*cell1data*/)
yourArray.append(/*cell2data*/)
self.collectionView?.reloadData()
}
//..
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return yourArray.count
}