在 UITableView 中嵌入不同数量的项目的 UICollectionViews 索引超出范围

Posted

技术标签:

【中文标题】在 UITableView 中嵌入不同数量的项目的 UICollectionViews 索引超出范围【英文标题】:index out of bounds with UICollectionViews with different amount of items embedded in UITableView 【发布时间】:2017-10-25 12:20:28 【问题描述】:

我有一个 UITableView(可垂直滚动),其中每一行(自定义 TableViewCell)包含一个带有一些 CollectionView 单元格的 UICollectionView(可水平滚动)

但是,集合视图具有不同数量的集合视图单元格:有些只有两个或三个,有些则超过十个。

问题是:当我在一个包含很多单元格的集合视图的一行上并水平滚动到最后一个单元格,然后垂直向下滚动到只有几个集合视图的集合视图单元格,我得到index out of bounds,因为该行被重用并滚动到比集合视图项更远的右侧。

您知道如何防止这种情况发生吗?也许通过准备重用?

【问题讨论】:

正如你所注意到的,单元格被重复使用......所以,每次你 dequeue a Reusable Cell 你需要确保它被“清理”。因此,由于您在cellForRowAt 中调用dequeueReusableCell,因此您要在此处重置/重新初始化单元格中的元素。 嗯,这就是我的想法,但是您知道如何准确地清理单元格并准备它们以供重复使用吗?有必要在作为 tableviewcell 的集合视图中重置水平滚动,并正确计算集合视图单元格的数量。我想我现在有点卡住了 有多种方法,具体取决于数据的结构。已经有一段时间了,但我知道我玩过这篇文章中的项目 - 可能对你来说是件好事:ashfurrow.com/blog/… 【参考方案1】:
 1.reload collection in UITableview cell row at indexpath
 2.before reload collectionView remove all array belong to collection view

【讨论】:

谢谢,cell.collectionView.reloadData() 似乎有效 :)

以上是关于在 UITableView 中嵌入不同数量的项目的 UICollectionViews 索引超出范围的主要内容,如果未能解决你的问题,请参考以下文章

在导航控制器中嵌入三个 UITableView 的 UIPageViewController

如何使用 uitableviewcell 在每个 uitableview 行中创建不同数量的 uilabel?

UITableView 在嵌入在容器中的控制器之间传递数据

如何在 UITableView 内的 UICollectionView 内获取数组数组并返回正确数量的项目?

基于动态集合视图的 UITableView 的动态高度

iOS - Swift Google AdMob SDK 如何在 UITableView 的重复项目中显示不同的广告?