首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

CollectionView sizeForItemAtIndexPath从未呼叫过

sizeForItemAtIndexPath 是 UICollectionView 的一个 delegate 方法,用于指定每个 cell 的大小。如果你发现这个方法从未被调用,可能是以下几个原因:

原因分析

  1. Delegate 未设置:确保你已经将 UICollectionView 的 delegate 设置为实现了 sizeForItemAtIndexPath 方法的对象。
  2. 布局对象未设置:如果你使用的是自定义的布局对象(如 UICollectionViewFlowLayout),确保你已经正确设置了布局对象,并且该布局对象支持动态 cell 大小。
  3. 数据源问题:确保你的数据源已经正确配置,并且 UICollectionView 能够正确地获取到数据。
  4. 布局缓存:UICollectionView 会缓存布局信息以提高性能,有时候缓存可能会导致 sizeForItemAtIndexPath 不被调用。你可以尝试清除缓存或禁用缓存来测试。

解决方法

  1. 检查 Delegate 设置
  2. 检查 Delegate 设置
  3. 确保布局对象正确设置
  4. 确保布局对象正确设置
  5. 检查数据源配置
  6. 检查数据源配置
  7. 清除布局缓存
  8. 清除布局缓存

示例代码

以下是一个完整的示例,展示了如何设置 UICollectionView 并实现 sizeForItemAtIndexPath 方法:

代码语言:txt
复制
import UIKit

class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {

    var collectionView: UICollectionView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let layout = UICollectionViewFlowLayout()
        collectionView = UICollectionView(frame: view.bounds, collectionViewLayout: layout)
        collectionView.delegate = self
        collectionView.dataSource = self
        collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "Cell")
        view.addSubview(collectionView)
    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 10
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)
        cell.backgroundColor = .blue
        return cell
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: 100, height: 100)
    }
}

参考链接

通过以上步骤,你应该能够解决 sizeForItemAtIndexPath 从未被调用的问题。如果问题仍然存在,请检查是否有其他代码或配置影响了 UICollectionView 的正常工作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Swift 探索 UICollectionView 之 SupplementaryView 和 Decoration View

    大家早上好,又到了每周和大家分享开发心得的时间啦!上周我分享了一篇关于 UICollectionView 自定义布局实现 Cover Flow 的文章(文章直通车),这也是我分享的关于 UICollectionView 系列的第四篇文章了,那今天我还是继续给大家带来 UICollectionView 开发系列的第五篇,这也是该系列计划写的最后一篇啦!当然,如果苹果开发者团队推出了关于 UICollectionView 的新的技术或者是我在开发中发现了新的技术点,我还是会持续更新这个系列,最终的目的是我希望通过这个系列的文章能把 UICollectionView 这个控件的核心技术点汇总齐全,毕竟 UICollectionView 使用的范围太广泛了。

    01

    iOS流布局UICollectionView系列六——将布局从平面应用到空间

    前面,我们将布局由线性的瀑布流布局扩展到了圆环布局,这使我们使用UICollectionView的布局思路大大迈进了一步,这次,我们玩的更加炫一些,想办法将布局应用的空间,你是否还记得,在管理布局的item的具体属性的类UICollectionViewLayoutAttributrs类中,有transform3D这个属性,通过这个属性的设置,我们真的可以在空间的坐标系中进行布局设计。iOS系统的控件中,也并非没有这样的先例,UIPickerView就是很好的一个实例,这篇博客,我们就通过使用UICollectionView实现一个类似系统的UIPickerView的布局视图,来体会UICollectionView在3D控件布局的魅力。系统的pickerView效果如下:

    02
    领券