UITableView随机消失的细胞

时间:2014-07-08 01:09:48

标签: uitableview ios7

我有一个相当简单的UITableView,它使用NSArray航班预订,每次预订显示一个单元格。最近,客户提出了一个问题(我偶尔会偶尔复制),因为有些细胞是完全隐藏的。他们的空间就在那里,但他们应该只是一个空隙。

该表有一个页眉和页脚,所以我可以看到间隙(它不仅仅是元素更少)。

此处的屏幕截图示例:http://myflightsapp.com/images/missing-cells.png

它确实是间歇性的,因为如果我重新启动应用程序,问题就会消失。

我尝试用一​​个非常简单的2衬里替换cellForRowAtIndexPath,只返回带有文本标签的完全标准的UITableViewCell,它显示相同的问题,所以对我来说排除Nib / Custom类是问题

heightForRowAtIndexPath总是返回一个常量,因此它没有错误地显示零高度行。

桌子上只有1个部分。

我已将调试放在numberOfSectionsInTableView方法中,并且它始终返回正确的数字(本例中为2)

我已将调试放在cellForRowAtIndexPath中,我从中了解到: 1)如果我将表格视图向上拉得足够高(所以单元格从屏幕上消失)并再次放开,在问题显示的情况下,它不会再次调用cellForRowAtIndexPath来尝试重绘单元格时表格滚动回视图,但当问题不存在时(即单元格全部可见),它会再次为每个单元格调用cellForRowAtIndexPath。

2)任何一个细胞都没有隐藏的'财产真实。

从其他地方添加调试(例如临时按钮),我可以为未显示的单元格手动调用cellForRowAtIndexPath方法,并返回看似有效单元格的内容。

所以我的问题是,是什么导致了我所看到的问题?我已经没有地方可以调试以查看问题所在。

会非常感谢任何帮助 - 我错过了什么?

2 个答案:

答案 0 :(得分:0)

可能导致此问题的原因是您没有足够的单元格来重复使用。在没有看到您的代码的情况下,我只是在猜测,但 会导致您的问题:

让我们说你的桌子高100分,每个格子10分。然后,您的表在任何给定时间都有10个(或11个)单元格,这些单元格当前在内存中可见,以及上面的10个视图和下面的10个视图。因此,该表创建了大约30个单元格,然后重复使用。

似乎没有足够的单元格可以在某些情况下重复使用。

关于如何修复"的几点想法你的情况:

  1. 当表格视图[myTableView reloadData]的变化超过表格视图contentOffset.y时,请使用frame.size.height。这将调用视图中的单元格进行重新创建。我不建议使用这种方法,因为如果需要重新创建大量数据或大量单元格,这种方法会非常激烈。
  2. 查找实际创建的单元格数。您可以为每个单元格添加标记,并在每次将单元格置于视图中时进行记录。这可能会让您更好地了解细胞如何重复使用。
  3. 根据您需要的单元格数量,您可以创建每个单元格,将其加载到数组中,然后返回cellForRowAtIndexPath的唯一单元格。根据您需要的单元数量,我认为这可能是您的最佳选择。

答案 1 :(得分:0)

在Apple Dev技术支持的帮助下......我已经解决了。为了其他任何遇到它的人的利益,原因是我不小心调用了从辅助线程而不是主线程重新加载表的方法。

要解决,我使用了以下

[self performSelectorOnMainThread:@selector(refreshMethod) withObject:nil waitUntilDone:YES];

到目前为止一切顺利。