做过瀑布流的都清楚,,后台数据会返回图片的宽高,,经过比例处理会整齐的排列。。collectionview的加载图片的过程是先全部设置好没个item的高度,,添加占位图片,,sdwebimage下载图片,,下载完成显示在对应的imageView,,那么后台不返回尺寸该怎么办??有的demo是在数据处理的时候将图片下载下来,获取尺寸,添加进model里。。在collectionview刷新的时候再给item的尺寸,,这样做可以。。但会比较耗时。。有图片缓存还好,,如果是上拉加载新的图片。。用户体验会特别的差。你就等吧。
与后台沟通后 结果是图片太多了 取尺寸太麻烦,,前台想办法。。。。。
安卓和iOS 都采用了同一个思路 先给一个固定相同的高度,,线程获取图片尺寸,,获取结束后,再刷新高度,,虽然用户体验也极差,,会看到图片突然地变大或变小。。但没找到更好的办法。。下面是我的APP用到的关键代码
#pragma mark 加载数据
- (void)addData{
__weakTuiJianViewController *weakSelf =self;
dispatch_async(dispatch_get_global_queue(0,0), ^{
[[CommuncationsharedInstance] loadShouYeTuiJianWithstart:requestStartlimit:limitsucess:^(id result) {
/// 断网的情况请求出错时走缓存数据
if ([resultisKindOfClass:[NSErrorclass]]) {
self.imagewarr = [NSMutableArrayarray];
self.imageharr = [NSMutableArrayarray];
requestResultArray = [NSMutableArrayarray];
requestResultArray = [NSKeyedUnarchiverunarchiveObjectWithFile:[PathToolthePath:@"TuiJianData"]];
for (NSDictionary *bodyin requestResultArray) {
NSString *imageUrl = imageUrl = body[@"video"][@"cover"];
/// 获取图片尺寸的方法,,有缓存从缓存中获取
CGSize size = [ImageSizeTool downloadImageSizeWithURL:[NSURLURLWithString:[NSStringstringWithFormat:@"%@%@",URLADDRESS,imageUrl]]];
[self.imagewarraddObject:[NSStringstringWithFormat:@"%f",size.width]];
[self.imageharraddObject:[NSStringstringWithFormat:@"%f",size.height]];
}
[weakSelf.tuijianCollectionViewreloadData];
[weakSelf.tuijianCollectionView.mj_footerendRefreshing];
[weakSelf.tuijianCollectionView.mj_headerendRefreshing];
}else{
if (!result[@"state"]) {
if (result[@"customMessage"]) {
[[iToastmakeText:result[@"customMessage"]]show];
}
}else{
NSInteger num =requestStart;
requestStart =requestStart + [result[@"body"]count];
self.imagearr = [NSMutableArrayarray];
for (NSDictionary *bodyin result[@"body"]) {
if (![requestResultArraycontainsObject:body]) {
[requestResultArrayaddObject:body];
}
NSString *imageUrl = body[@"live"][@"cover"];
[self