我有嵌套的集合视图(水平滚动)到表视图单元格的表视图。像这样:
-table view:
- section
- cell:
- collection view
在开始屏幕上,我有3个部分,每个部分有1个单元格。当我尝试在单元格中重用1部分时,重点项目的indexPath不会改变。
例如,如果我选择1个第1部分单元格并在集合视图中选择了第12个焦点项目,则以这种方式向下滚动表格视图,就可以更改焦点项目并切换到表格视图的另一个部分。因此,我重用了单元格,并看到了相同的焦点indexPath(12行)。因此,集合视图将滚动到该项目。
我试图重启preferredFocusEnvironments在
重写func prepareForReuse()
但是没有结果。当我设置为false时,collectionView.remembersLastFocusedIndexPath = false
它并不能帮助我解决问题。我该如何解决这个问题?
我发现问题出在collectionView的contentOffset中。当我重用tableViewCell时,我没有在collectionView中重置offset。因此,我将每个collectionView的所有偏移量都保存在tableViewCell中,并通过键将该值设置为collectionView。像这样的东西func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
:
return tableView.dequeueReusableCell(cellClass: HomeTableViewCell.self, for: indexPath).adjust {
if let id = $0.feedID {
contentOffsets[id] = $0.collectionView.contentOffset
}
$0.preprareForDisplay(feed: feeds[indexPath.section)
$0.collectionView.contentOffset = contentOffsets[feeds[indexPath.section].origin.id] ?? .zero
}
因此,在完成重点工作后,正确无误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句