UICollectionView:未正确调用cellForItemAt

时间:2017-10-05 10:19:59

标签: uicollectionview

我正在尝试使用一堆子视图创建一个UICOllectionView,可以添加和删除不同的子视图。 问题是没有正确调用cellForItemAt。例如。 numberOfItemsInSection设置为4,所以我希望有4个子视图。但是,不会为所有项调用cellForItemAt,仅针对可见,并且仅当我滚动此UICollectionView时才调用它。有没有办法一次性为所有项目调用它? 另一个问题是,在滚动浏览UICollectionView之后,它会添加额外的子视图,这对应于之前的一个子视图。 enter image description here

enter image description here

enter image description here 所以目前尚不清楚,为什么在显示所有项目后立即调用cellForItemAt。以及如何为这个附加项选择indexPath.row。 最后一个奇怪的事情就是当我向后滚动时再次调用cellForItemAt,因此它将子视图添加到已经有一些子视图的单元格中,以便它们一个堆叠在另一个上面: enter image description here 看来,UIcollection的工作方式与UITableView

中的原理完全不同

1 个答案:

答案 0 :(得分:0)

UICollectionView与UITableView真的不同。 ' cellForItemAt'每当一个细胞即将变得可见时调用它,所以在第一次加载时,它只会被你的可见细胞调用,这是你看到的行为。当您滚动浏览时,将为每个单元格显示它们。这使得它更具内存效率,因为单元被重用并且仅在需要时创建。

我不确定您是否可以强制它最初加载所有单元格而不需要一些hacky代码来自行滚动集合视图或以编程方式调用您想要的代码。如果不能更好地理解您的实施,这可能不是您想要的。

滚动到结尾时的附加cellForItem调用可能是由于集合视图'弹跳'在最后一个单元格上,由于动画而重新加载前一个单元格。还有' indexPath.row'应该用' indexPath.item'替换。对于集合视图,但这不应该真正影响您的实现。