如何根据 UITableView 滚动动态调整 UITableViewCell 的大小?

Posted

技术标签:

【中文标题】如何根据 UITableView 滚动动态调整 UITableViewCell 的大小?【英文标题】:How to dynamically resize UITableViewCell based on UITableView scrolling? 【发布时间】:2013-05-19 22:15:51 【问题描述】:

我试图寻找这个问题的答案,但到目前为止我还没有运气。

上下文

我在标准 UIViewController(不是 UITableViewController..)中有一个 UITableView。我对 UITableViewCell 进行了子类化,并且 tableview 中的所有单元格都来自同一类。

要求

我想找到一种有效的方法来根据表格视图的滚动来调整单元格的大小。例如,当单元格位于可见列表的底部时,高度为 X。当单元格在屏幕上向上移动时,其高度应按比例增加到 2X。

其他信息

我即将放弃 UITableView 的方式,开始制作我自己的控件,通过继承 UIScrollView 来实现这样的壮举。但是,我想在走这条路之前看看是否有可能。我确实看到了一些非常有趣的 SO 帖子,但没有什么能让我走上正确的道路。

任何提示或帮助将不胜感激。

【问题讨论】:

您只需使用 while 循环来控制屏幕是否在移动。例如:while(scrollview.frame.height == ) cell.height = x;然后在你滚动的时候做 while(scrollview.frame.height > || scrollview.frame.height ) cell.height += 2;希望这会有所帮助 【参考方案1】:

您需要响应滚动视图委托方法scrollViewDidScroll: 并实现它以记录表格视图顶部的单元格并重新加载表格视图。然后你的表格视图委托方法tableView:heightForRowAtIndexPath:通过索引路径和顶部单元格索引路径的关系设置单元格高度。

您的主要问题是始终重新加载表格视图时的性能。

如果您想推出自己的解决方案,无论如何都会按照上面的描述进行,但是您将能够比表格视图更有效,因为表格视图将每次调用一次tableView:heightForRowAtIndexPath: 方法每次重新加载的行,以计算表格内容的总高度。

【讨论】:

谢谢。我也认为使用 tableview 没有有效的方法。

以上是关于如何根据 UITableView 滚动动态调整 UITableViewCell 的大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据ios 8中的内容动态调整UITableview Header高度

如何将 UITableView 的高度调整为内容大小的高度?

动态地将单元格添加到分组的 uitableview 并以编程方式适应滚动

如何滚动到 UITableView 底部以查看所有单元格内容而不调整单元格高度?

UITableView:如何知道 TableView 的所有具有动态单元格高度的单元格何时被调整大小?

如何动态调整滚动视图高度