reloadData 没有调用 cellForItemAt

Posted

技术标签:

【中文标题】reloadData 没有调用 cellForItemAt【英文标题】:reloadData not calling cellForItemAt 【发布时间】:2017-06-11 02:36:37 【问题描述】:

我按照UICollectionView reloadData resigns first responder in section header 在collectionview 上实现了搜索栏,但是当调用collectionView?.reloadData() 时,会显示下面的屏幕,我必须向下滚动才能找到过滤后的单元格。 我的数据源代码

override func numberOfSections(in collectionView: UICollectionView) -> Int 
    return 2


override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    return section == 0 ? 0 : count // this got called after reloadData


override func collectionView(_ collectionView: UICollectionView,
                             cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    let cell = collectionView.dequeueReusableCell(...)
    // this function did not get called after reloadData

【问题讨论】:

请显示搜索栏部分的代码并重新加载数据。 【参考方案1】:

发现问题...我将搜索栏高度设置为collectionView.contentSize,由于某种原因,在reloadData之后从50变为2600

【讨论】:

【参考方案2】:

确保当您的 collectionview 重新加载时,它会显示一些内容。如果您的数据源具有 0 值,则 Count 具有一些值,那么您的 cellForItem 也不会被调用。

【讨论】:

【参考方案3】:

您是否只重新加载单元格而不是所有数据?过滤数据源数组后,您可以将countcollectionView.numberOfItemsInSection(1) 进行比较,并在此基础上重新加载所需的单元格,删除其余单元格,如果需要更多单元格则添加。这样做的好处是您还可以获得漂亮的过滤动画。

【讨论】:

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

viewForHeaderInSection 没有在 reloadData 上被调用

reloadData 没有调用 cellForRowAtIndexPath

cellForRowAtIndexPath:reloaddata 未调用

tableView.reloadData() 不起作用,可能没有在主线程上调用

iOS - tableView 的 reloadData 不调用 cellForRowAtIndexPath

在 UICollectionView 上调用 reloadData 后 contentSize 未更新