UITableView高度设置的方式大概是一下几种,这里会主要提到第三种estimatedRowHeight 自适应高度
rowHeight方式
UITableView询问高度的方式有两种
一种是针对所有的Cell具有固定高度的情况
self.mainTable.rowHeight = 88;
另一种方式就是实现 UITableViewDelegate 中的针对每一个Cell进行单独设置
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 88;
}
需要注意的是,实现了这个方法后,rowHeight 的设置将无效。所以,这个方法适用于具有多种 cell 高度的 UITableView。
estimatedRowHeight
我们知道,UITableView 是个 UIScrollView,就像平时使用 UIScrollView 一样,加载时指定 contentSize 后它才能根据自己的 bounds、contentInset、contentOffset 等属性共同决定是否可以滑动以及滚动条的长度。而 UITableView 在一开始并不知道自己会被填充多少内容,于是询问 data source 个数和创建 cell,同时询问 delegate 这些 cell 应该显示的高度,这就造成它在加载的时候浪费了多余的计算在屏幕外边的 cell 上
种类不同的 cell,我们依然可以使用简单的 estimatedRowHeight 属性赋值,只要整体估算值接近就可以,比如大概有一半 cell 高度是 44, 一半 cell 高度是 88, 那就可以估算一个 66,基本符合预期。
//给tablView添加着两句配合好约束就再也不用计算高度了
self.mianTableView.estimatedRowHeight = 213;
self.mianTableView.rowHeight = UITableViewAutomaticDimension;
注意问题
- 当lable高度不确定的时候约束的设置,需要设置一个最低高度,当然lines也要设置为0
image.png
2.当Cell上需要用到一个自定义的空间时,需要手动在.m里面添加这个控件该如何设置约束
解决这个的方式类似于lable的,首先在Cell里面添加一个BottomView为这个控件占好位置,设置好这个Bottomview的上下左右以及最小高度
image.png
然后在cell.m里面手动创建这个控件添加到这个BottomView上,通过代码手动设置这个控件的约束,将这个BootomVIew给撑开
image.png
结果:
image.png
网友评论