iOS SDWebImage的progressBlock中expectedsize =0问题

今天使用SDWebImage加载图片的时候想要一个进度条的加载效果,用的方法如下

[imageView sd_setImageWithPreviousCachedImageWithURL:[NSURL URLWithString:imageUrl] placeholderImage:nil options:SDWebImageCacheMemoryOnly|SDWebImageProgressiveDownload progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {

            [SVProgressHUD showProgress:(float)receivedSize/(float)expectedSize];

        } completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
            if ([SVProgressHUD isVisible]) {
                [SVProgressHUD dismiss];
            }

           //your code
           ...
            
        }];

结果发现progressBlock中的expectedSize始终是0。

这是因为NSHTTPURLResponse中 Accept-Encoding为gzip造成的
当遇到Accept-Encoding为gzip时,expectedsize会变为-1不确定的大小
此时在SDWebImage中expectedsize判断小于0,就会赋值为0

解决方法:可以将Accept-Encoding修改成非gzip的就可以获取需要的文件大小了

        [[SDWebImageDownloader sharedDownloader] setValue:@"" forHTTPHeaderField:@"Accept-Encoding"];

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容