CollectionView 方法 cellForItemAt indexPath:未被调用(Swift)

问题描述 投票:0回答:6

我已经使用了

UICollectionViewController
并且我正在尝试将图像添加到我的集合视图单元格中,但是
UICollectionView
方法没有被调用。

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! CircularCollectionViewCell
        cell.imageName = images[indexPath.row]
        return cell

    }
ios swift xcode uicollectionview
6个回答
5
投票

如果您不向集合视图提供

内容大小信息
,则不会调用cellForItemAtIndexPath

您可以做的是设置

collectionViewLayout
,如下所示:

 let flowLayout = UICollectionViewFlowLayout()
 flowLayout.scrollDirection = .vertical
 collectionView.collectionViewLayout = flowLayout

3
投票

提示:如果在重新加载之前更改了 collectionView 的大小或位置,则不会调用 CellforRow at:indexPath 方法,请确保您没有这样做。


2
投票

如果您的 UICollectionView 的内容大小不合适,则不会调用 cellForItemAt。

我有两个解决方案。

  1. 在重新加载collectionView之前调用collectionView.layoutIfneeded()。
  2. 在重新加载collectionView之前在主线程中添加collectionViewLayout,这有助于调整内容大小。
 DispatchQueue.main.async {
      let flowLayout = UICollectionViewFlowLayout()
      flowLayout.scrollDirection = .horizontal
      self.collectionView.collectionViewLayout = flowLayout
 }
 self.collectionView.reloadData()

0
投票

UICollectionViewController
中,默认设置子类
delegate
dataSource

数据源方法中默认使用0。您需要更改这些值。

override func numberOfSections(in collectionView: UICollectionView) -> Int {        
    return 1
}    

override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {        
    print(images.count)
    return images.count
}

0
投票

一种可能的情况是集合视图的大小为零。当大小为零(宽度或高度= 0)时,

cellForItemAt
不会被调用。

就我而言,我将

UICollectionView
放入
UIStackView
中,并将
Alignment
设置为
Leading
,并且忘记将 的宽度设置为等于堆栈视图。


-2
投票
self.collectionView.reloadData()
© www.soinside.com 2019 - 2024. All rights reserved.