2012-09-08 44 views
2

我注意到当表视图单元格包含频繁更新的UIProgressView时,表视图的滚动行为会受到显着影响。UITableView中的UIProgressView更新导致滚动瑕疵

更确切地说,由于进度视图的频繁更新,表视图的位置稍微变化,而表视图的“橡皮筋”动画正在动画。当表格视图在顶部拉时也会发生同样的情况。这很难解释,但我希望你能得到这个要点。

当然,由于UIProgressView如何在幕后工作,因此无法在后台更新进度视图。这是一个知道的问题?有没有解决这个问题的方法?

+1

它只是我的建议,设置一个布尔变量使其当用户开始滚动表视图时为true当用户滚动和滚动结束时更新uiprogressview更新进度视图并将布尔变量设置为false。 – prasad

+0

这是一个很好的建议,但不幸的是它不能解决问题。 –

回答

1

我不确定这个问题是否可以在没有解决方法的情况下解决。我找到的解决方案使用计时器和进度缓存。我的猜测是苹果使用了类似的方法。

我提出的解决方案涉及创建一个对象,一个数组或字典,用于跟踪显示在表视图中的每个项目的进度。每当表格视图单元格的下载进度发生变化时,不必更新每个单元格,而是管理表格视图的视图控制器会定期更新可见表格视图单元格,这可能会像您期望的那样频繁或不频繁。

我认为苹果是这么做的。例如,Podcasts应用程序的下载视图中的进度视图会定期更新,并且不会顺利进行,这支持了我对Apple使用计时器更新表视图的猜测。

0

它听起来不像普通的UITableView行为。我试图理解当你说“由于UIProgressView如何在后台工作”而在后台更新进度视图是不可能的时候你的意思。如果确保所有非UI操作都在后台完成,并且仅对主线程上的UIProgressView执行更新,则这些工件就会消失。

+0

我的意思是说,在后台线程上更新UIProgressView是没有选择的。这确实是奇怪的。包含UIProgressView的UITableViewCell接收调用以通过KVO更新进度视图,这就是更新(进度视图)周期中发生的所有事件。 –