UITableViewCell动态高度

2017-02-22  本文已影响0人  ioido

设置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;
}
上一篇下一篇

猜你喜欢

热点阅读