UITableView Cell高度自适应笔记整理

由于项目需要,tableview需要高度自适应,一站在巨人的肩膀上为核心思想,自然去google了一把.看到了4000+star的FDTemplateLayoutCell,于是试用了一番,结果简直棒的不要不要,顺利完成项目需求。

但是。
写这篇文章的初衷不是因为完成了项目,而是因为在第二次用到它的时候却让我差点崩溃。可能是在下运气太好,第一次使用并没有遇到太多出乎意料的问题,于是乎觉得自己已经得到要领,所以在第二次栽了跟头。

进入正题:
只说重点

1.tableview注册cell
[self.tableView registerClass:[CommentTableViewCell class]    forCellReuseIdentifier:@"cell"];

这句是必须要加的,当然这也不是什么大问题,只要看过FDTemplateLayoutCell的demo应该不会遗漏。

2.重写heightForRowAtIndexPath
- (CGFloat)tableView:(UITableView *)tableView    heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    //在这里也可用缓存的方法
    //fd_heightForCellWithIdentifier:(NSString *)identifier cacheByIndexPath:(NSIndexPath *)indexPath
return [tableView fd_heightForCellWithIdentifier:@"cell"  configuration:^(CommentTableViewCell *cell) {
   //在这里从新配置cell的内容
    [self configCell:cell atIndexoath:indexPath];
}];
}

这也没什么可说的

3.重点来了(鄙人就是在这里栽跟头的)

鄙人是因为用了自动布局,用到了Masonry的框架。
出现的问题是,没个cell都错落的叠在了一起,FDTemplateLayoutCell的debug打印出的cell高度全是0,我特么当时就GG(傻逼)了,前几天用的还是好好的,各种方法都试了,还是GG,最后还是万能的google救了我(百度根本是扯淡)。

其实原因很简单,既然计算的高度是0,我想应该是我的cell布局的约束哪里不符合FDTemplateLayoutCell这个库的要求,google到得同仁和我一样,他是因为在约束时没有写bottom的约束。

bad eg:
 _content = [[UILabel alloc] init];
_content.numberOfLines = 0;
[self.contentView addSubview:_content];
[_content mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(_head.mas_bottom).offset(10);
    make.left.equalTo(_head.mas_left);
    make.right.equalTo(self.contentView.mas_right).offset(-10);
}];
good eg:
 _content = [[UILabel alloc] init];
_content.numberOfLines = 0;
[self.contentView addSubview:_content];
[_content mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(_head.mas_bottom).offset(10);
    make.left.equalTo(_head.mas_left);
    make.right.equalTo(self.contentView.mas_right).offset(-10);
    make.bottom.equalTo(self.contentView.mas_bottom).offset(-10);//主要是这句,要约束cell中最先面的subview到contentView_masbottom的约束(:-()
}];

结束语

一定要多google啊!

你可能感兴趣的:(UITableView Cell高度自适应笔记整理)