我正在尝试制作一个带有一堆子视图的UICOllectionView,可以添加和删除不同的子视图。问题是cellForItemAt没有被正确调用。例如,numberOfItemsInSection设置为4,所以我希望有4个子视图。但是,并不是对所有项都调用cellForItemAt,而是只对可见项调用,而且只有在滚动此UICollectionView时才会调用它。有没有办法一次为所有项目调用它?另一个问题是,在滚动UICollectionView到最后之后,它会添加额外的子视图,该子视图对应于之前的一个子视图。



因此,不清楚为什么在显示所有项后立即调用cellForItemAt。以及它如何为这个附加项目选择indexPath.row。最后一件奇怪的事情是,当我向后滚动时,cellForItemAt再次被调用,所以它向已经有一些子视图的单元格添加子视图,以便将它们堆叠在另一个单元格上:

看起来,UIcollection的工作方式与UITableView中的原理完全不同
发布于 2017-10-05 18:31:39
与UITableView相比,UICollectionView并没有那么大的区别,真的。每次一个单元格将要变得可见时,都会调用'cellForItemAt‘,所以在第一次加载时,它只会为你的可见单元格调用,这就是你看到的行为。当您滚动浏览时,它将在每个单元格出现时为其调用。这使得它的内存效率更高,因为单元被重用,并且仅在需要时创建。
我不确定您是否可以强制它加载所有单元格,而不需要编写一些繁琐的代码来自己滚动集合视图或以编程方式调用您想要的代码。如果不能更好地理解您的实现,这可能不是您想要的。
当滚动到末尾时,额外的cellForItem调用可能是由于集合视图在最后一个单元格上“弹跳”,并由于动画原因重新加载了前一个单元格。此外,对于集合视图,“indexPath.row”可能应该替换为“indexPath.item”,但这不会真正影响您的实现。
https://stackoverflow.com/questions/46583261
复制相似问题