iOS7下使用Auto Layout动态计算cell高度

在实际的开发中,我们可能经常要动态的设置tableviewcell的高度,如果使用Auto Layout进行布局的话,那么我们一般的操作步骤是:

  • 创建一个cell,并用xib进行描述,在xib中使用Auto Layout进行控件布局;
  • 在TableViewController中注册并使用创建好的cell;

如果cell的高度是固定不变的,那么以上两个步骤就可以满足,但是如果cell的高度是动态变化的,即需要动态计算cell高度的时候,那么我们就需要额外做出设置。

在iOS8+系统上

iOS8 及以上系统上的设置很简单,我们只需要设置一下估算高度即可:

 //iOS8以后如果要动态计算cell高度,这个估算高度必须要设置,不设置的话自动计算就失效。
self.tableView.estimatedRowHeight = 200;
self.tableView.rowHeight = UITableViewAutomaticDimension;

ios7-系统上

在ios7环境下,单独设置以上代码会发生crash,但是可以使用一个新的API systemLayoutSizeFittingSize:来计算UITableViewCell所占空间高度。

MyTableViewCell* cell =(MyTableViewCell*)[self tableView:tableView cellForRowAtIndexPath:indexPath];
    
CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;

return height + 1;

为何这儿要加1呢?原因就是因为这行代码CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];由于是在cell.contentView上调用这个方法,那么返回的值将是contentView的高度,UITableViewCell的高度要比它的contentView要高1,也就是它的分隔线的高度。

你可能感兴趣的:(iOS7下使用Auto Layout动态计算cell高度)