首页 > 解决方案 > ProgressView 未在 iOS 中更新

问题描述

我知道这个问题在 StackOverflow 上被问过很多次,但我已经检查过了。我的问题是我在从 api hit 得到响应后在主线程上更新这样的进度条

dispatch_async(dispatch_get_main_queue(),^{

     for (int i = 0; i < 5000; i++) 
     {
        NSLog(@"%f",i);
        [progressView setProgress:i/5000 animated:YES];
     }
 });

从这种方式我的progressivew没有更新但是当我设置静态数字时它正在工作

[progressView setProgress:0.7 animated:YES];

经过搜索,我发现浮点十进制数字存在问题。因为 i/5000 即使在 4999/5000 上也总是给出 0.000000。所以经过一番谷歌搜索后,我改变了

dispatch_async(dispatch_get_main_queue(),^{

     for (int i = 0; i < 5000; i++) 
     {
        float f = (float)i/5000;
        [progressView setProgress:f animated:YES];
     }
 });

现在它正在更新,但进度视图不会连续更新,它是从 0 到 1 的最后一次跟踪更新

标签: iosobjective-cswiftprogress-bar

解决方案


你做对的第一个问题,整数除法总是会给你 0。

第二个问题是主线程上的 UI 更新 - 即使在那时也只是定期更新。现在您的代码也在主线程上运行,因此在您的代码执行时 UI 完全被阻塞。它只会在您的代码结束后才有机会更新,因此您只会看到最终值实际被渲染。


推荐阅读