Ios 可变大小的UITableViewCells

Ios 可变大小的UITableViewCells,ios,uitableview,Ios,Uitableview,我有点奇怪的问题。我已经为我的表格单元格设置了自定义高度的UITableView设置。当在后台为单元格加载内容时,问题就出现了。我需要尽快加载单元,但每个单元都有一个大图像,加载可能需要一些时间(从网络或闪存),因此在第一次加载单元时在后台开始加载。这意味着单元格的高度最初是错误的,以后需要以最小的毛刺进行更新。我遇到的问题是,它并不总是想更新表或图像,并且可能会导致一些过度滚动 它也非常慢。我需要做一些优化,使其速度稍微慢一点(制作主图像的较小副本,并暂时缓存单元格的高度) 我试过各种各样的东

我有点奇怪的问题。我已经为我的表格单元格设置了自定义高度的UITableView设置。当在后台为单元格加载内容时,问题就出现了。我需要尽快加载单元,但每个单元都有一个大图像,加载可能需要一些时间(从网络或闪存),因此在第一次加载单元时在后台开始加载。这意味着单元格的高度最初是错误的,以后需要以最小的毛刺进行更新。我遇到的问题是,它并不总是想更新表或图像,并且可能会导致一些过度滚动

它也非常慢。我需要做一些优化,使其速度稍微慢一点(制作主图像的较小副本,并暂时缓存单元格的高度)

我试过各种各样的东西。我确保表在主线程中被告知要更新,我尝试了一组简单的BeginUpdate/EndUpdate、reloadRows/reloadSections(表处于分组模式,每个部分一行)。一旦图像加载完毕,我还没有让表正确更新


如果有人对如何使这项工作尽可能顺利有一些见解,我将不胜感激。

要去的地方是你的
高度指数:
方法。它需要知道图像是否存在,并相应地返回一个值。每次每一行加载完它的图像时,您都应该调用reloadRows~方法,如下所示:

NSArray *indexPaths = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:x inSection:y]];
[self.tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade];
我不完全确定这是否会导致您的tableView上出现一些沉重的滚动,但这是一个选项


另一个选择是分块更新。假设每加载5-10个图像(取决于你有多少个),用同样的方法重新加载它们各自的行。

是的,我已经尝试过了。我现在有点问题,因为这会完全重新加载单元格,重新调用图像获取代码。是否可以保证重新加载的单元格重复使用相同的UITableViewCell?我正试图找到一种很好的方法来打破循环,但是如果它不是同一个cell对象,几乎没有办法正确地打破它。不能保证重复使用同一个cell,它将使用排队的最后一个cell。您可以创建某种处理程序(或在tableView的父控制器中执行),用于处理图像下载并与您的行通信,以便它不会尝试重新加载已加载/正在加载的图像。是的,我必须执行类似的操作。我想有点争论。好吧,我已经更新了,做了类似的事情,它基本上是有效的,但最后几个单元格不想正确更新。可能是我的一些虫子,我需要找到。但是sheesh UtableView太烦人了。所以我解决了我的问题。基本上,我必须将图像加载代码从单元移动到视图控制器,并修复几个愚蠢的错误。也花了一些时间来优化事情,现在变得更加顺利了。