swift 集合视图方法索引处的cellForItemPath:未被调用(斯威夫特)

qhhrdooz  于 2023-02-03  发布在  Swift
关注(0)|答案(5)|浏览(203)

我已经使用了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

    }
8qgya5xd

8qgya5xd1#

提示:CellforRow at:indexPath 方法不会被调用,如果collectionView的大小或位置在重载之前发生了变化,请确保您没有这样做。

vuv7lop3

vuv7lop32#

如果不向集合视图提供内容大小信息,则不会调用cellForItemAtIndexPath
您可以按如下所示设置collectionViewLayout

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

rsaldnfx3#

如果UICollectionView的内容大小不正确,则不会调用cellForItemAt。
我有两个解决办法。
1.在重新加载collectionView之前调用collectionView.layoutIfneeded()。
1.在重新加载collectionView之前,在主线程中添加collectionViewLayout,这有助于调整内容大小。

DispatchQueue.main.async {
      let flowLayout = UICollectionViewFlowLayout()
      flowLayout.scrollDirection = .horizontal
      self.collectionView.collectionViewLayout = flowLayout
 }
 self.collectionView.reloadData()
gg0vcinb

gg0vcinb4#

self.collectionView.reloadData()
pcrecxhr

pcrecxhr5#

UICollectionViewController中,默认情况下设置delegatedataSource子类。
并且默认情况下在数据源方法中使用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
}

相关问题