UITableView carga celdas de imagen de red para adaptarse a la altura de la imagen

1. Arrastre y suelte una vista de imagen en un cell.xib personalizado.

Restricciones de ribete arriba, abajo, izquierda y derecha, atributos de conexión

cell.h
@property (strong, nonatomic) IBOutlet UIImageView *imgView;

Insertar descripción de la imagen aquí

2. Establezca la altura de la celda de acuerdo con el tamaño de la imagen en VC.m

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    
    
    return self.picAdrVOS.count;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    
    
    // 先从缓存中查找图片
    NSString *imgURL = self.picAdrVOS[indexPath.row].imgUrl;
    UIImage *image = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:imgURL];
    
    if (!image) {
    
    
        return 0;
    }
    //手动计算cell
    CGFloat imgHeight = image.size.height * kScreenWidth / image.size.width;
    return imgHeight;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    
    YBMImgTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"YBMImgTableViewCell" forIndexPath:indexPath];
    [self configureCell:cell atIndexPath:indexPath];
    ……
    return cell;
}

//加载图片
- (void)configureCell:(YBMImgTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
    
    
    YBMShopHomePicModel *model = self.picAdrVOS[indexPath.row];
    UIImage *cachedImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:model.imgUrl];
    if (!cachedImage ) {
    
    
        [self downloadImage:model.imgUrl];
    } else {
    
    
        cell.imgView.image = cachedImage;
    }
}

- (void)downloadImage:(NSString *)imageURL{
    
    
    // 利用 SDWebImage 框架提供的功能下载图片
    [[SDWebImageDownloader sharedDownloader]downloadImageWithURL:[NSURL URLWithString:imageURL] options:SDWebImageDownloaderUseNSURLCache progress:^(NSInteger receivedSize, NSInteger expectedSize) {
    
    
    } completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
    
    
        [[SDImageCache sharedImageCache]storeImage:image forKey:imageURL toDisk:YES];
        // ⚠️必须判断有图片才刷新,避免因加载失败而引起死循环!
        if(image) {
    
    
        	dispatch_async(dispatch_get_main_queue(), ^{
    
    
            	[self.tableView reloadData];
        	});
        }
    }];
}

Esto logrará el efecto.

⚠️⚠️⚠️Nota: Cuando falla la carga de la imagen, debe determinar que hay una imagen antes de actualizar tableView para evitar un bucle infinito causado por la falla de carga de la imagen.

Supongo que te gusta

Origin blog.csdn.net/biyuhuaping/article/details/123133223
Recomendado
Clasificación