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