1. 程式人生 > >UITableViewCell圖片高度自適應問題

UITableViewCell圖片高度自適應問題

  對於一般UI設計,我們都把圖片的寫死,但是經常有種需求是需要我們自動根據圖片寬高比實現圖片的自動縮放功能。這裡有多種辦法可以解決這種問題,常見的問題處理方式有如下幾種:

1.後臺返回圖片的尺寸大小,然後前端根據圖片size調整響應的高度,一般寬度定死。

2.利用網路圖片框架,獲取下載到的網路圖片實際大小,然後快取起來,區域性重新整理cell,重新展示。

鑑於之前專案上面也是有類似的需求,這裡我們就採用了第二種方案實現:

/**快取圖片高度*/
@property (nonatomic,strong)NSMutableDictionary *imageHeightArray;

部分原始碼展示:

1.cellForIndexPath中快取圖片高度,並重新整理

 [cell.currentImgView sd_setImageWithURL:[NSURL URLWithString:imgURL] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
        if (image.size.height>0) {
            CGFloat scale =  screenWidth/image.size.width;
            CGFloat scaleHeight = image.size.height*scale;
            if (![[slf.imageHeightArray allKeys] containsObject:@(indexPath.row)]) {
                [slf.imageHeightArray setObject:@(scaleHeight) forKey:@(indexPath.row)];
                [slf.tableView beginUpdates];
                [slf.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
                [slf.tableView endUpdates];
            }
        }
    }];

2.heightForRowAtIndexPath中返回實際高度

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CGFloat height = [[self.imageHeightArray objectForKey:@(indexPath.row)] floatValue];
    if (height>0) {
        return height;
    }
    //給定圖片一個預設高度,用於臨時佔位圖
    return 200;
}