在实际的开发中,我们可能经常要动态的设置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,也就是它的分隔线的高度。