iOS老中医

iOS SDWebImage的progressBlock中exp

2017-12-26  本文已影响114人  杂货铺学徒

今天使用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"];

上一篇下一篇

猜你喜欢

热点阅读