Grouped UITableView页脚有时隐藏在快速滚动上

时间:2009-10-07 02:47:27

标签: iphone uitableview insert row footer

好的,这个是一个益智游戏。有one similar post,但它不够相似,所以我发布这个。 :)

我有一个带有页眉和页脚的分组 UITableView 。页脚包含两个 UIButton 视图,并排显示。没什么大不了的。

现在......底部的 UIToolbar 中有一个切换按钮,可在此表格视图中显示更多/更少的信息。所以我构建我的索引路径以删除/插入淡入淡出行动画,所有常用的成分,夹在 UITableView 上的beginUpdatesendUpdates之间......这样就可以了!同样,我的页脚有时会被推离显示屏的底部。

这是奇怪的地方。如果我将手指向上拖动显示器,向上滚动视图,我最终应该看到该页脚,对吧?

嗯......大部分时间我都这样做。但是,如果我向上滑动手指,为了更快的滚动,页脚缺少。即使你试图挖掘该区域 - 没有回应。

但是,如果我再次向下滚动,只是为了隐藏该页脚(或者更确切地说是隐藏页脚通常所在的区域),然后向上滚动,它再次出现在那里!

仅当插入行时才会发生这种情况。如果我删除行,页脚保持... ...除非它已经被隐藏,我没有执行上述咒语来取回它。 :)

我试图追查这一点,但无济于事。我想通过滚动操作进行跟踪是一个疯狂的命题!也许一些有创意的记录...建议,任何人?或者这是3.1中与行插入/删除有关的已知问题? (我不记得在3.1之前看过它。)

2 个答案:

答案 0 :(得分:0)

您是否尝试使用从页脚按钮调用的方法更改页脚中的内容,例如在页脚的UILabel上的changig文本?这就是我尝试做的事情。但是:页脚未更新。或者更确切地说:它已更新,但不在屏幕上。将页脚从可见阵列中向外滚动显示正确的页脚。所以有一个更新问题。

所以也许你会看到相同的重绘问题?

我试图调用所有方法(needlayout needsDisplay等)没有任何效果。 解决这个问题的唯一方法是表或部分重新加载,但这会导致我的rowAnimation死亡。接下来,我尝试通过通知调用重新加载,希望在调用通知之前完成动画。不。 最后,我使用一个计划的计时器来重新加载数据,在我的插入/删除行的启动时开始延迟100-200ms。所以动画在加载之前完成。

它看起来现在正在运行,但价格是一个短暂的“闪光”,在更新之前有一个错误的页脚。

更新

好的,在Skie的支持下,我解决了我的重绘问题。请参阅this

我不确定这种方法或者至少这个想法是否可以解决你的问题,但也许....

答案 1 :(得分:0)

确定继续使用我们的应用程序,我经常在重绘问题上偶然发现。在调查了几小时后,似乎只有一个解决方案[tableView reloadData]。但对于破碎的动画,有一个更好的解决方案(比我的第一个答案)。完成动画后,您可以立即进行方法调用,并且不再有“闪烁”:

[UIView beginAnimations:nil context:[NSNumber numberWithInt:section]];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
...do something on the table..
and commitAnimation

在你的animationDidStop中重新加载表。

但是为重新加载找到正确的时刻/事件仍然很棘手,特别是如果你正在使用fetchedResultsController,它会在用于排序的属性发生后立即自己触发委托方法。 / p>

所有这些仍然是围绕细胞视图更新问题编程的练习,不应该是一个。