iOS - UITableView加载网络图片 cell适应图片高度

时间:2023-03-08 16:33:40

使用xib创建自定制cell   显示图片   创建一个继承UITableViewCell的类   勾选xib

如下是xib创建图

xib

iOS - UITableView加载网络图片 cell适应图片高度

向.h拖拽一个关联线

.h

iOS - UITableView加载网络图片 cell适应图片高度

.m

iOS - UITableView加载网络图片 cell适应图片高度

2.代码创建(使用三方适配库进行适配Masonry三方代码适配)

.h

#import <UIKit/UIKit.h>

@interface NFTrailerNextTableViewCell : UITableViewCell

@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;

}

这样就可以了再见