reloadSections后的UICollectionView:和reloadData,单元格无法正确更新

时间:2015-11-23 11:33:52

标签: ios uicollectionview reloaddata

我有一个带UICollectionView的控制器工具,它有两个部分。 截面数据是从两个不同的API中获取的,返回顺序是未知的。

当返回第一节数据时,我调用reloadSections来更新第一节的单元格。 当返回第二部分数据时,我调用reloadData来更新整个单元格(包括第一部分和第二部分)

但是如果我在reloadSections之前调用reloadData,则单元格会正确更新。 在reloadData之前调用reloadSections时,第二部分中的项目计数是正确的,但是单元格显示重复的内容,而不是新的内容。

我编写了一个演示项目并将新数据插入第二部分,调用reloadData,将新数据插入第一部分。集合视图也可以正常工作。

当我调用reloadSections时,它不起作用: FirstSection ,然后调用reloadData。

演示项目可以在这里找到: https://github.com/6david9/ReloadData/blob/master/ReloadData/ReloadData/ViewController.m

P.S。当我为每个部分更新调用reloadSections时,结果是正确的!

P.S。当我为第一部分调用reloadSections时,它会重新加载第一部分中的所有单元格。但在那之后,我调用reloadData它只调用第二节中最后一项的cellForItem,我将新项添加到第二节的前面。所以它显示最后一个项目的重复内容。

2 个答案:

答案 0 :(得分:1)

问题是当重新加载数据被调用时只调用集合视图

cellForItemAtIndexPath

表示第二个列表和第二个列表中的最后一个索引。所以你的数据是重复的。它应该重新加载整个集合视图,但它没有这样做。我认为出于某些表现原因还是其他原因。他们在重新加载文档中也说

“不要在动画中间调用它,例如插入或删除”

您在该过程中调用它,因此从集合视图中获得了一些性能效率。在集合视图完全重新加载后,尝试在其他场合调用这些插入。我运行你的项目,从断点检查我发现了这个结论。祝你好运

答案 1 :(得分:0)

  

但是单元格显示重复的内容,而不是新内容。

最常见的原因是,如果重复使用单元格,则必须清除单元格内容。例如:您应该删除以编程方式创建的视图或清除字段或标签值...