2

好的,这是一个谜题。有一个类似的帖子,但它的相似性不足以计算,所以我发布了这个。:)

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

现在......底部的UIToolbar中有一个切换按钮,用于在此表视图中获取更多/更少信息。所以我建立了我的索引路径来删除/插入淡入淡出的行动画,所有常用的成分,夹在UITableViewbeginUpdates之间并endUpdates调用......这很好用!有时我的页脚可能会被推到显示屏底部之外。

这就是它变得奇怪的地方。如果我在显示屏上拖动手指,向上滚动视图,我最终应该会看到那个页脚,对吧?

嗯……大部分时间我都这样做。但是,如果我向上轻弹手指,为了更快地滚动,页脚会丢失。即使您尝试点击该区域 - 也没有响应。

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

这仅在插入行时发生。如果我删除行,页脚将保持不变……当然,除非它已经被隐藏并且我没有执行上述咒语来将其取回。:)

我试图通过这个来追踪,但无济于事。我想通过滚动操作进行跟踪有点疯狂!也许是一些创造性的日志记录……建议,有人吗?或者这是 3.1 中涉及行插入/删除的已知问题?(我不记得直到 3.1 才看到它。)

4

2 回答 2

0

您是否尝试在从页脚按钮调用的方法中更改页脚中的某些内容,例如在页脚中的 UILabel 上更改文本?这就是我尝试做的。但是:页脚未更新。或者更准确地说:它已更新,但不在屏幕上。将页脚滚动出可见数组并返回显示正确的页脚。所以存在更新问题。

所以也许你看到了同样的重绘问题?

我试图调用所有方法(needslayout needsDisplay 等),但没有任何效果。解决此问题的唯一方法是重新加载表或部分,但这会杀死我的 rowAnimation。接下来,我尝试通过通知调用重新加载,希望动画在调用通知之前完成。没有。最后,我使用预定的计时器重新加载数据,延迟时间为 100-200 毫秒,从我的插入/删除行开始。所以动画在加载之前就完成了。

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

更新

好的,在 Skie 的支持下,我解决了我的重绘问题。请参考这个

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

于 2010-04-26T11:48:48.513 回答
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 ,一旦用于排序的属性发生更改,它就会自行触发他的委托方法。

所有这一切仍然是围绕单元格视图更新问题进行编程的练习,这不应该是一个问题。

于 2010-06-08T15:23:39.790 回答