美文网首页
UITableViewCell动态高度

UITableViewCell动态高度

作者: ioido | 来源:发表于2017-02-22 11:09 被阅读0次

    设置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;
    }

    相关文章

      网友评论

          本文标题:UITableViewCell动态高度

          本文链接:https://www.haomeiwen.com/subject/wkwpwttx.html