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】:您是否只重新加载单元格而不是所有数据?过滤数据源数组后,您可以将count
与collectionView.numberOfItemsInSection(1)
进行比较,并在此基础上重新加载所需的单元格,删除其余单元格,如果需要更多单元格则添加。这样做的好处是您还可以获得漂亮的过滤动画。
【讨论】:
以上是关于reloadData 没有调用 cellForItemAt的主要内容,如果未能解决你的问题,请参考以下文章
viewForHeaderInSection 没有在 reloadData 上被调用
reloadData 没有调用 cellForRowAtIndexPath
cellForRowAtIndexPath:reloaddata 未调用
tableView.reloadData() 不起作用,可能没有在主线程上调用