我有一个带有页眉和页脚的分组 UITableView 。页脚包含两个 UIButton 视图,并排显示。没什么大不了的。
现在......底部的 UIToolbar 中有一个切换按钮,可在此表格视图中显示更多/更少的信息。所以我构建我的索引路径以删除/插入淡入淡出行动画,所有常用的成分,夹在 UITableView 上的beginUpdates
和endUpdates
之间......这样就可以了!同样,我的页脚有时会被推离显示屏的底部。
这是奇怪的地方。如果我将手指向上拖动显示器,向上滚动视图,我最终应该看到该页脚,对吧?
嗯......大部分时间我都这样做。但是,如果我向上滑动手指,为了更快的滚动,页脚缺少。即使你试图挖掘该区域 - 没有回应。
但是,如果我再次向下滚动,只是为了隐藏该页脚(或者更确切地说是隐藏页脚通常所在的区域),然后向上滚动,它再次出现在那里!
仅当插入行时才会发生这种情况。如果我删除行,页脚保持... ...除非它已经被隐藏,我没有执行上述咒语来取回它。 :)
我试图追查这一点,但无济于事。我想通过滚动操作进行跟踪是一个疯狂的命题!也许一些有创意的记录...建议,任何人?或者这是3.1中与行插入/删除有关的已知问题? (我不记得在3.1之前看过它。)
答案 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>
所有这些仍然是围绕细胞视图更新问题编程的练习,不应该是一个。