我在tableView单元格内使用水平滚动collectionView。我可以做所有工作,但是我遇到的是collectionView错过了tableView滚动时滚动的indexPath自身。考虑一下: 1.我在一个单元格(单元格A)的collectionView中滚动,并移至indexPath的第9项和第0部分。 2.我滚动tableView,单元格A退出屏幕。 3.我向后滚动,单元格A将再次显示。 现在,单元格A的集合已被重置,并且位于项目0和0部分的indexPath中。
我如何解决这个问题以保留在项目9中?
答案 0 :(得分:1)
实际上,它没有返回零索引。它保持不变。 但是,因为tableView重用了所有集合视图,所以当它离开屏幕并返回并继承另一个collectionView的位置时,它将替换为另一个单元格。
因此,要解决此问题,请告诉tableView 不重用包含集合视图的单元格。为此,必须为每个单元设置不同的标识符。
您还可以将滚动位置存储在didEndDisplayingCell...
上,并将其恢复到willDisplayCell...
上。但是如果单元格位于滚动动画的中间,则会立即停止。
我建议您尝试两种方式,并测试内存使用情况和性能,然后选择最适合您的东西。
答案 1 :(得分:0)
有两个WorkArounds。
1-重置UICollectionView偏移位置:
要重置collectionview的位置,只需在cellForRowAtIndexPath中调用cell.collectionView.contentOffset = .zero
2-保持上一个滚动位置:
要保持先前的滚动位置,您需要为每个单元格的偏移量列表与数据模型一起存储在包含的视图控制器中。然后,您可以将给定单元格的偏移量保存在didEndDisplayingCell中,并在cellForRowAtIndexPath中而不是.zero
中进行设置