未调用 cellForItem 或 sizeForItem

Posted

技术标签:

【中文标题】未调用 cellForItem 或 sizeForItem【英文标题】:cellForItem or sizeForItem not called 【发布时间】:2017-08-31 15:11:57 【问题描述】:

我是第一次尝试 IGListKit,但我似乎很早就遇到了障碍

lazy var collectionView: UICollectionView = 
    let collectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout())
    collectionView.backgroundColor = .white
    return collectionView
()

override func viewDidLoad() 
    super.viewDidLoad()

    self.view.addSubview(self.collectionView)

    let updater = ListAdapterUpdater()
    let adapter = ListAdapter(updater: updater, viewController: self, workingRangeSize: 0)
    adapter.collectionView = self.collectionView

    adapter.dataSource = self


override func viewDidLayoutSubviews() 
    super.viewDidLayoutSubviews()
    collectionView.frame = view.bounds

extension SocialViewController: ListAdapterDataSource 

func objects(for listAdapter: ListAdapter) -> [ListDiffable] 
    // this can be anything!
    return [ "Foo" as ListDiffable, "Bar" as ListDiffable]


func listAdapter(_ listAdapter: ListAdapter, sectionControllerFor object: Any) -> ListSectionController 
    return TopNewsSectionController()


func emptyView(for listAdapter: ListAdapter) -> UIView? 
    return UIImageView(image: UIImage(named: "swords"))

类 TopNewsSectionController: ListSectionController

override func sizeForItem(at index: Int) -> CGSize 
    return CGSize(width: collectionContext!.containerSize.width, height: 55)


override func cellForItem(at index: Int) -> UICollectionViewCell 
    return collectionContext!.dequeueReusableCell(of: TopNewsCollectionViewCell.self, for: self, at: index)

但我的 cellForItem 或 sizeForItem 都没有被调用 我做错了什么?

【问题讨论】:

您是否尝试在 IGListAdapterDataSource 方法(对象、节控制器)中放置断点以确保它们被调用?我还假设您在 sizeForItem() 和 cellForItem() 中放置了一个断点,对吗?您使用的是哪个版本的 IGListKit?你的设置对我来说很好。您可能想尝试将其作为一个问题发布到 GitHub 上,我们在那里更加活跃:github.com/Instagram/IGListKit/issues/new 【参考方案1】:

尝试将适配器声明为类属性而不是方法属性,

    let updater = ListAdapterUpdater()
    let adapter = ListAdapter(updater: updater, viewController: self, workingRangeSize: 0)
    adapter.collectionView = self.collectionView

    lazy var adapter: ListAdapter = 
        return ListAdapter(updater: ListAdapterUpdater(), viewController: self, workingRangeSize: 0)
    ()

【讨论】:

【参考方案2】:

致电adapter.performUpdatesAnimatedadapter.reloadDataWithCompletion(首次加载)更新

【讨论】:

【参考方案3】:

viewDidLoad 返回时,您的 adapter 对象将被销毁。尝试将其声明为您的 ViewController 的属性。

【讨论】:

以上是关于未调用 cellForItem 或 sizeForItem的主要内容,如果未能解决你的问题,请参考以下文章

为啥在索引路径中的 UICollectionView 的 cellForItem 在一开始就被所有单元格调用

collectionView.cellForItem(at:indexPath)无法正常工作

UICollectionView cellForItem(at:) 崩溃

WebRTC 数据通道未连接或未调用回调

NSMenu 未调用 validateMenuItem 或 menuWillOpen

Android 登录按钮未调用 onActivityResult 或回调方法