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,也就是它的分隔线的高度。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容