我有一个相当简单的UITableView,它使用NSArray航班预订,每次预订显示一个单元格。最近,客户提出了一个问题(我偶尔会偶尔复制),因为有些细胞是完全隐藏的。他们的空间就在那里,但他们应该只是一个空隙。
该表有一个页眉和页脚,所以我可以看到间隙(它不仅仅是元素更少)。
此处的屏幕截图示例:http://myflightsapp.com/images/missing-cells.png
它确实是间歇性的,因为如果我重新启动应用程序,问题就会消失。
我尝试用一个非常简单的2衬里替换cellForRowAtIndexPath,只返回带有文本标签的完全标准的UITableViewCell,它显示相同的问题,所以对我来说排除Nib / Custom类是问题
heightForRowAtIndexPath总是返回一个常量,因此它没有错误地显示零高度行。
桌子上只有1个部分。
我已将调试放在numberOfSectionsInTableView方法中,并且它始终返回正确的数字(本例中为2)
我已将调试放在cellForRowAtIndexPath中,我从中了解到: 1)如果我将表格视图向上拉得足够高(所以单元格从屏幕上消失)并再次放开,在问题显示的情况下,它不会再次调用cellForRowAtIndexPath来尝试重绘单元格时表格滚动回视图,但当问题不存在时(即单元格全部可见),它会再次为每个单元格调用cellForRowAtIndexPath。
2)任何一个细胞都没有隐藏的'财产真实。
从其他地方添加调试(例如临时按钮),我可以为未显示的单元格手动调用cellForRowAtIndexPath方法,并返回看似有效单元格的内容。
所以我的问题是,是什么导致了我所看到的问题?我已经没有地方可以调试以查看问题所在。
会非常感谢任何帮助 - 我错过了什么?
答案 0 :(得分:0)
可能导致此问题的原因是您没有足够的单元格来重复使用。在没有看到您的代码的情况下,我只是在猜测,但 会导致您的问题:
让我们说你的桌子高100分,每个格子10分。然后,您的表在任何给定时间都有10个(或11个)单元格,这些单元格当前在内存中可见,以及上面的10个视图和下面的10个视图。因此,该表创建了大约30个单元格,然后重复使用。
似乎没有足够的单元格可以在某些情况下重复使用。
关于如何修复"的几点想法你的情况:
[myTableView reloadData]
的变化超过表格视图contentOffset.y
时,请使用frame.size.height
。这将调用视图中的单元格进行重新创建。我不建议使用这种方法,因为如果需要重新创建大量数据或大量单元格,这种方法会非常激烈。cellForRowAtIndexPath
的唯一单元格。根据您需要的单元数量,我认为这可能是您的最佳选择。答案 1 :(得分:0)
在Apple Dev技术支持的帮助下......我已经解决了。为了其他任何遇到它的人的利益,原因是我不小心调用了从辅助线程而不是主线程重新加载表的方法。
要解决,我使用了以下
[self performSelectorOnMainThread:@selector(refreshMethod) withObject:nil waitUntilDone:YES];
到目前为止一切顺利。