阻止UITableViewCell可能出列吗?

时间:2009-06-06 21:05:05

标签: iphone uitableview

我正在项目中使用Three20库的一部分。具体来说,一个视图本质上是一个表格视图,图像在每个单元格中都有4个宽,以模仿iPhone的照片应用缩略图视图。

我注意到,一旦单元格的底部到达导航栏的底部(这是半透明的,所以我们实际上可以看到它消失),每个单元格的行为都会出列。这提出的问题是,每当一个单元格出列然后再返回视图时,它会重新加载图像,这导致滚动变得非常紧张,除了表格的慢速滚动之外。我知道这些单元被重用以最小化内存使用,但是有可能防止单元格出列吗?或者重新定义“边界”,以便在准备好重复使用时创建一个更大的缓冲区,这样它们只有在屏幕外有一定数量的行时才会消失?

4 个答案:

答案 0 :(得分:2)

你已经倒退了。 UITableView没有出列。当你拨打-dequeueResusableCellWithIdentifier:时,你会这样做。 “出队”并不意味着“释放”。这意味着“拉出缓存不再使用的可重用单元的队列”。它被称为“出列”,因为它是一个FIFO队列的单元格,而你正在拉开第一个。

如果滚动速度很慢,则需要提高绘图速度,当UITableView请求时,您可能需要更快地返回单元格。使可重复使用的单元出列的系统不是为了节省内存(它实际上需要内存);它是为了提高性能。你不想绕过它;这正是帮助修复的情况。

那么,你是如何绘制这些单元格的呢?当UITableView请求时,你是如何配置它们的呢?这就是我们要找到你的绩效改进的地方。

答案 1 :(得分:0)

我相信您要更改表格视图框以包含导航栏区域。

[self.tableView setFrame:GCRectMake(0,0,320,480)];

您应该记住,这可能会导致一些其他问题,因为该区域将被计为可查看区域,您将无法从半透明导航栏下方滚动第一个单元格。要解决此问题,您可能还需要将tableView.tableHeaderView设置为与UIView的高度相对应的空UINavigationBar

(从理论上讲,你的视图底部的UITabBar会出现同样的问题。)

答案 2 :(得分:0)

您可以尝试将图像放入NSMutableDictionary中。在构建单元格的位置,检查是否已存储所需的图像。如果是,请使用该副本,如果没有从最初获取图像的地方加载它并将其放在字典中。我想我使用了一个NSMutableDictionary,其中图像标识符作为键,图像作为值来执行此操作,并加快了表格的滚动。

如果收到内存警告,您可能想要卸载NSMutableDictionary。

您的问题可能只是因为您正在通过网络加载图像,这会使滚动不稳定。点击此处查看解决方案。

Preloading images from URL in TableViewCell

答案 3 :(得分:0)

尝试更改其重用标识符。然后,如果您想让它可以取消,请再次更改标识符。我还没试过,但这可行![/ p>