带有 UICollectionView 的 UITableView

Posted

技术标签:

【中文标题】带有 UICollectionView 的 UITableView【英文标题】:UITableView with UICollectionView 【发布时间】:2015-07-01 19:02:23 【问题描述】:

我有一个 UITableView,其中 tableview 的每一行都有 uicollectionview 数据。 我面临的问题是 UITableView 大约有 800-1000 行,然后每行几乎有 200-400 左右的 uicollectionview 单元格。

当我开始滚动 uicollectionview 和/或 uitableview 时,它会变慢,有时会因为内存警告而崩溃。

由于数据量大,我理解这个原因。但我想知道如何动态加载和卸载数据的最佳方法,以便它永远不会出现内存错误并且永远不会变慢。

请提出建议。

谢谢

【问题讨论】:

你不能只使用一个集合视图但有很多部分吗?也就是说,您将放置在表格视图单元格中的每组项目的一个部分。 如果你正确地回收你不应该有问题。你能发布你的代码吗? 【参考方案1】:

也许您可以仅在表格未滚动时加载显示的单元格的数据,并防止在表格滚动时加载单元格的数据。 (查看滚动视图委托函数,它可能会给你表格滚动和减速的指示)。

【讨论】:

【参考方案2】:

我肯定会建议对放置在表格内的 UITableView 和 UICollectionView 使用分页。 好的做法是仅预加载 10 - 20 个元素。如果用户滚动到列表末尾,应用程序会加载下一页(10 - 20 个元素)。

在您的情况下,这将是两种类型的分页:1。 UITableView 的垂直分页。 当用户向下滚动到表格列表的末尾时,应用程序将加载接下来 10 个表格单元格的数据。每个单元格将为单元格内的集合视图加载 10 个项目的数据。2。 UICollectionView 的水平分页。 当用户向右滚动到集合列表的末尾时,应用程序将为接下来的 10 个集合单元加载数据。

在大多数情况下,用户不会加载很多页面,因此动画会很流畅,不会崩溃。 对于用户仍然向下和向右加载数百行的较少情况,您可以在视图控制器中实现方法- (void)didReceiveMemoryWarning。在这种方法中,您可以释放与当前未在屏幕上显示的单元格相关的大量数据(图像、视频)。

【讨论】:

我正在从字典和数组中的核心数据中检索完整的数据,然后使用该字典/数组填充 UITableView 和 UICollectionView。我试图检查内存消耗。每当我滚动时,它会不断增加内存,当它达到 200mb 以上时,它会发出内存警告,然后它会崩溃。

以上是关于带有 UICollectionView 的 UITableView的主要内容,如果未能解决你的问题,请参考以下文章

带有 UICollectionView 的 UITableView

带有图像数组的 UICollectionView 设置正确

带有装饰的 UICollectionView

带有 endItemAnimations 的 UICollectionView 中的断言失败

带有自定义 UICollectionViewCell 的 UICollectionView

带有自定义标题的 UICollectionView