由于项目需要,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啊!