iOS的Cell自适应的几种解决方案

前言

对于Cell的自适应,每一个app都需要解决的。笔者尝试了以下几种方式进行Cell的自适应

一、手动计算Cell的高度

其实这个方案就是根据模型,计算好行高,保存在Cell中,只需要注意一点,要先计算好行高,再进行赋值操作

二、给tableview设置一个预估行高

给tableview设置estimatedRowHeight后,再对Cell约束好后,tableview就会自动适应行高了。这样做的性能非常不好,不推荐

三、UITableView+FDTemplateLayoutCell

github地址,使用这个框架的前提是,你的Cell的底部是依赖其内容决定的,这非常重要!

例如你的Cell中包含一个40X40头像,左上间距各为10,一个UILabel,上下左右间距为10,行数由内容决定。
iOS的Cell自适应的几种解决方案_第1张图片
使用Mansory描述的话(当然有时候xib,SB方法约束也可以),代码如下

[iconImageView mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(self.contentView).offset(10);
    make.leading.equalTo(self.contentView).offset(10);
    make.height.width.mas_equalTo(40);
  }];
  [contentLabel mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(self.contentView).offset(10);
    make.leading.equalTo(self.contentView).offset(10);
    make.trailing.equalTo(self.contentView).offset(-10);
    make.bottom.equalTo(self.contentView).offset(-10);
  }];

这样一来,你的Cell的上下左右都给其内容确定了。这时候你还需要做以下两步

  • 注册Cell
  • 在返回行高的方法实现以下方法
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
// CellID为你为Cell注册的ID
  CGFloat height = [tableView fd_heightForCellWithIdentifier:CellID cacheByIndexPath:indexPath configuration:^(id cell) {
    // 这里要对Cell进行重新赋值,跟cellForRowAtIndexPath的赋值操作一样
  }];
  return height;
}

四、SDAutoLayout

这个框架的使用,大家可以看看我的另一个博客http://blog.csdn.net/bloody_leaves/article/details/53044388,也是非常强大的一个框架。

你可能感兴趣的:(iOS,ios,解决方案)