我已经使用了
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
}
如果您不向集合视图提供
内容大小信息,则不会调用
cellForItemAtIndexPath
。
您可以做的是设置
collectionViewLayout
,如下所示:
let flowLayout = UICollectionViewFlowLayout()
flowLayout.scrollDirection = .vertical
collectionView.collectionViewLayout = flowLayout
提示:如果在重新加载之前更改了 collectionView 的大小或位置,则不会调用 CellforRow at:indexPath 方法,请确保您没有这样做。
如果您的 UICollectionView 的内容大小不合适,则不会调用 cellForItemAt。
我有两个解决方案。
DispatchQueue.main.async { let flowLayout = UICollectionViewFlowLayout() flowLayout.scrollDirection = .horizontal self.collectionView.collectionViewLayout = flowLayout } self.collectionView.reloadData()
在
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)时,
cellForItemAt
不会被调用。
就我而言,我将
UICollectionView
放入 UIStackView
中,并将 Alignment
设置为 Leading
,并且忘记将 的宽度设置为等于堆栈视图。
self.collectionView.reloadData()