在 UIScrollView 内的 UITableView 中按需加载单元格

Posted

技术标签:

【中文标题】在 UIScrollView 内的 UITableView 中按需加载单元格【英文标题】:On-demand loading of cells in UITableView within a UIScrollView 【发布时间】:2012-02-23 08:11:04 【问题描述】:

我在 UIScrollView 中有一个 UITableView。

虽然这并不理想,但它是“必要的”,因为我想在表格顶部放置另一个自定义视图,使用滚动视图将其滚动。表格视图用于我的应用程序的许多不同部分,并且可以很好地保持它的封装和可重用性。

现在的问题是,因为我不再利用 UITableView 本身的滚动(它的大小足以显示其所有单元格,然后放置在滚动视图中),我失去了单元格的按需加载。当我的表格视图包含多个单元格时,这会导致无法接受的性能。

在不丢失动态单元格加载的情况下设置此类内容的最佳方法是什么?

我能想到的唯一方法是让整个东西成为一个表格视图,让我的顶部自定义视图只是另一个单元格。但这意味着我不能干净利落地重用我的 UITableView。

【问题讨论】:

“按需加载单元格”是什么意思? 抱歉不清楚。我的意思是只有当它可见时才会创建和加载单元格,这样应用程序就不必一次创建每个单元格。如果以更标准的方式使用,这是 UITableViews 的典型行为。 【参考方案1】:

只要你的tableView在一个scrollView里面,你就会遇到这个问题,因为整个tableView必须被绘制,因此所有的单元格都必须被分配。

我建议使用UITableViewDelegate 中的– tableView:viewForHeaderInSection:– tableView:heightForHeaderInSection: 将视图作为标题添加到tableView。

这不会像将 tableView 放在另一个视图中那样干净,但它不应该像将附加视图实现为单元格那样糟糕,因为您不必弄乱像 cellForRowAtIndexPath: 这样的方法.

【讨论】:

【参考方案2】:

OLEContainerScrollView 似乎是一个解决方案。

这允许你在其中添加多个 UIScrollView(UITableView, UICollectionView),同时保持单元重用机制在内部 UITableView,UICollectionView 上有效。

【讨论】:

请不要只发布指向某个工具或库的链接作为答案。至少在答案本身中展示how it solves the problem。 已根据您的建议更新了我的答案。谢谢,@Baum。

以上是关于在 UIScrollView 内的 UITableView 中按需加载单元格的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 内的 UIButton 在点击时不会触发

UITableViewCell 内的 UIScrollView - 水平滚动

UIScrollview 内的 UIView 内的 UILabel 上的 UIGestureRecognizer

在 UIScrollView 内的 UIImageView 上启用 GestureRegnizer

UIScrollView 内的 UITableView

UIScrollView 内的可选 UITableViewCells