iOS - UITableView加載網絡圖片 cell適應圖片高度

使用xib建立自定製cell   顯示圖片   建立一個繼承UITableViewCell的類   勾選xib緩存

以下是xib建立圖框架

xibasync

 

向.h拖拽一個關聯線atom

.hspa

.m3d

 2.代碼建立(使用三方適配庫進行適配Masonry三方代碼適配)代理

.hcode

#import <UIKit/UIKit.h>orm

 

@interface NFTrailerNextTableViewCell : UITableViewCellblog

@property (nonatomic, strong) UIButton *imageBtn;

@end

 

.m

#import "NFTrailerNextTableViewCell.h"

 

@implementation NFTrailerNextTableViewCell

 

- (void)awakeFromNib {

    [super awakeFromNib];

    // Initialization code

}

 

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {

    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

    if (self) {

        

        [self.contentView addSubview:self.imageBtn];

        [self.imageBtn mas_makeConstraints:^(MASConstraintMaker *make) {

            make.left.offset(0);

            make.top.offset(0);

            make.right.offset(0);

            make.bottom.offset(-10);

        }];

    }

    return self;

}

 

- (UIButton *)imageBtn {

    if (nil == _imageBtn) {

        _imageBtn = [[UIButton alloc] init];

        _imageBtn.userInteractionEnabled = NO;

    }

    return _imageBtn;

}

 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

    [super setSelected:selected animated:animated];

 

    // Configure the view for the selected state

}

 

@end

 

 下面是公用的tableView的代理方法   以及使用SDImageView加載圖片的方法

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

    

    //self.dataArr.count

    return self.imagearr.count;

    

}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    

    NFTrailerNextTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([NFTrailerNextTableViewCell class])];

    [self configureCell:cell atIndexPath:indexPath];

    cell.userInteractionEnabled = NO;

    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    return cell;

}

 

//加載圖片

- (void)configureCell:(NFTrailerNextTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {

    NSString *imgURL = self.imagearr[indexPath.row];

    UIImage *cachedImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:imgURL];

    if ( !cachedImage ) {

        [self downloadImage:self.imagearr[indexPath.row] forIndexPath:indexPath];

        [cell.imageBtn setBackgroundImage:[UIImage imageNamed:@"國投互聯"] forState:UIControlStateNormal];

    } else {

        [cell.imageBtn setBackgroundImage:cachedImage forState:UIControlStateNormal];

    }

}

 

- (void)downloadImage:(NSString *)imageURL forIndexPath:(NSIndexPath *)indexPath {

    // 利用 SDWebImage 框架提供的功能下載圖片

    [[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:imageURL] options:SDWebImageDownloaderUseNSURLCache progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {

        

    } completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, BOOL finished) {

        [[SDImageCache sharedImageCache] storeImage:image forKey:imageURL toDisk:YES completion:^{

            

        }];

        dispatch_async(dispatch_get_main_queue(), ^{

            [self.NFTableView reloadData];

        });

    }];

}

 

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

    // 先從緩存中查找圖片

    UIImage *image = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:self.imagearr[indexPath.row]];

    // 沒有找到已下載的圖片就使用默認的佔位圖,固然高度也是默認的高度了,除了高度不固定的文字部分。

    if (!image) {

        image = [UIImage imageNamed:@"國投互聯"];

    }

    //手動計算cell

    CGFloat imgHeight = image.size.height * [UIScreen mainScreen].bounds.size.width / image.size.width;

    return imgHeight;

}

 

這樣就能夠了再見

相關文章
相關標籤/搜索