首页 > 解决方案 > 当我尝试插入项目时,UICollectionView 在滚动时出现故障

问题描述

我使用 collectionView 实现了一个提要功能。我使用组合布局创建 collectionView 的布局。

我的集合视图由 4 个部分组成,我的第 4 个部分根据从后端返回的内容显示 4 个不同的单元格。

我首先使用以下代码注册每个单元格:

let nib = UINib(nibName: cellType.className, bundle: nil)
self.register(nib, forCellWithReuseIdentifier: cellType.className)

className 只是在 NSObject 上添加的一个扩展,它的值将类名表示为字符串值

然后我以这种方式创建我的布局:

let collectionViewWidth = collectionView.frame.width
let groupSize = NSCollectionLayoutSize(widthDimension: .absolute(collectionViewWidth), heightDimension: .estimated(433))
let itemSize = NSCollectionLayoutSize(widthDimension: .absolute(collectionViewWidth - 46), heightDimension: .estimated(433))
let groupItem = NSCollectionLayoutItem(layoutSize: itemSize)
let group = NSCollectionLayoutGroup.vertical(layoutSize: groupSize, subitems: [groupItem])
let section = NSCollectionLayoutSection(group: group)
section.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: 23, bottom: 0, trailing: 23)

433这种情况下,据推测是该部分中单元格可以达到的最大高度,但某些单元格的高度可以低至 137。所有单元格都调整了约束,以便可以根据内容估计高度。

我面临的问题是当我尝试对 collectionView 进行分页时。这是我所做的:我使用 collectionView 的 willDisplay 函数来知道何时到达可用内容的末尾。

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
if indexPath.row == feedItems.count - 1 && !isLastPage {
getCommunityFeed()
}
}

然后我调用一个端点来检索下一页内容,一旦检索到数据,我就将单元格插入到 collectionView 中。我在主线程上这样做。这里的问题是我的collectionView出现故障,滚动一点都不流畅,一旦发生插入操作,滚动视图就会向上跳跃。即使在将数据插入collectionView 之后,collectionView 的滚动行为在collectionView 内向上或向下滚动时通常会出现故障。

标签: iosswiftuicollectionviewuicollectionviewcompositionallayout

解决方案


推荐阅读