设置cell动态高度有好几种方法:
1.使用SDAutoLayout:http://blog.csdn.net/gsd_ios/article/details/50219713
2.使用Masonry:http://www.jianshu.com/p/3fc1b14e3f97
3.使用UITableView+FDTemplateLayoutCell.h 参考地址同上。
4.添加一个SampleCell用来计算高度:http://blog.csdn.net/horisea/article/details/52025886
我选了最后一种方法,原因是我的cell不是完全AutoLayout。最后一种方法自定义程度比较高。理解一下第四种方法,其实就是要先用一种方法根据数据Model计算出cell高度,然后渲染出cell视图。并将高度存储在数组中,方便使用,省略重复计算。
controller中:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CGFloat height = [[self.heightArray h_safeObjectAtIndex:indexPath.row] floatValue];
if (height) {
return height;
}else{
height = [[FoundCellHeight shareInstance] cellHeightWithModel:self.datalist[indexPath.row]];
[self.heightArray addObject:@(height)];
return height;
}
}
计算高度的类中:
+ (FoundCellHeight *)shareInstance {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_sharedInstance = [[FoundCellHeight alloc] init];
});
return _sharedInstance;
}
- (CGFloat)cellHeightWithModel:(FoundModel *)model {
CGFloat labelHeight = [model.desc sizeWithLabelWidth:kScreenWidth - 24 font:[UIFont systemFontOfSize:15]].height;
CGFloat picHeight;
if (model.picArr.count == 0) {
picHeight = 0;
}else if (model.picArr.count <= 3) {
picHeight = 98;
}else {
picHeight = 98*2;
}
return labelHeight + picHeight + 227-88-18;
}
网友评论