有时我们会需要对cell的图片和文字进行显示并完美自适配其大小,下面用我有限的知识做了个适配,看着好像还能用,哈哈
直接上code
001 在tableview的获取cell高度的方法里写调用自定义cell的一个方法
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
// 计算cell内容的高度
TableViewCell *cell = (TableViewCell *)[self tableView:_tableView cellForRowAtIndexPath:indexPath];
return [cell cellForHeight];
}
002 接下来开始重点喽
自定义TableViewCell的.h文件, 做主要控件
@interface TableViewCell : UITableViewCell
@property (nonatomic, strong) UILabel *title;
@property (nonatomic, strong) UIImageView *photo;
@property (nonatomic, strong) UILabel *describe;
@property (nonatomic, assign) CGSize imageSize;
@property (nonatomic, assign) CGSize describeSize;
@property (nonatomic, strong) DataModel *model;
- (void)setModel:(DataModel *)model;
// 获取cell的高度的方法
- (CGFloat)cellForHeight;
@end
003 在.m文件里进行赋值
- (void)setModel:(DataModel *)model
{
self.title.text = model.title;
// 给图片赋值
[self setImageURLSize:model.imageURL];
// 给文字赋值
[self setreviewContentText:model.describe];
}
003__01 文字的自适应高度
//赋值 and 自动换行,计算出cell的高度
-(void)setreviewContentText:(NSString*)text
{
//获得当前cell高度
CGRect frame = [self frame];
//文本赋值
self.describe.text = text;
//设置label的最大行数
self.describe.numberOfLines = 0;
CGSize size = CGSizeMake(self.width-30, 1000);
self.describeSize = [self.describe.text sizeWithFont:self.describe.font constrainedToSize:size lineBreakMode:NSLineBreakByClipping];
self.describe.frame = CGRectMake(self.describe.frame.origin.x, self.photo.bottom + 10, _describe.width, _describeSize.height);
frame.size.height = _describe.height;
self.frame = frame;
}
003__02 网络不规则图片的自适应高度,记得导入SDWebImage
-(void)setImageURLSize:(NSString*)imageURL
{
// 先从缓存中查找图片
UIImage *image = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey: imageURL];
// 没有找到已下载的图片就使用默认的占位图,当然高度也是默认的高度了,除了高度不固定的文字部分。
if (!image) {
image = [UIImage imageNamed:@"Wechat"];
// 图片不存在,下载图片
[self downloadImage:imageURL];
}
else
{
self.photo.image = image;
//手动计算cell
CGFloat imgHeight = image.size.height * [UIScreen mainScreen].bounds.size.width / image.size.width;
_photo.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width , imgHeight);
_imageSize.height = imgHeight;
}
}
图片不存在,下载图片
- (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];
dispatch_async(dispatch_get_main_queue(), ^{
// 回到主线程做操做
// 请求完成 刷新代码
[[NSNotificationCenter defaultCenter] postNotificationName:@"reload" object:nil];
});
}];
}
004 在列表页收到刷新通知,并刷新列表
// 接受通知并刷新tableview
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reload:) name:@"reload" object:nil];
- (void)reload:(UIButton *)button
{
[_tableView reloadData];
}
到此就欧了
点击下载Demo