1.預(yù)估cell高度
- 為cell的子控件添加約束
- 設(shè)置高度
有兩種寫法:
self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = 100;
或者
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 100;//隨便寫,但是越接近真實(shí)高度越好
}
http://www.reibang.com/p/64f0e1557562
但是這個(gè)方法實(shí)際上在有多個(gè)子視圖的cell上滑動(dòng)是很卡頓的
2. 手動(dòng)計(jì)算Cell的高度
高度固定的情況下直接設(shè)置
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 666;
}
或者高度固定的情況下直接
self.tableView.rowHeight = 666;
高度不定的需要提前拿到model中的數(shù)據(jù)來手動(dòng)計(jì)算每個(gè)控件的高度(一般為文字類Label
,
)
手動(dòng)計(jì)算高度的話铃将,最開始都是根據(jù)cell內(nèi)子控件內(nèi)容的高度來手動(dòng)累加起來寸谜,但是這個(gè)方法每次都要去手動(dòng)處理其中的算高邏輯媳瞪,而且橫豎屏切換的時(shí)候還要重新計(jì)算
計(jì)算
如果cell中有配圖脑题,而且是有的cell有摇展,有的cell沒有洋闽。給配圖控件添加約束時(shí)阐污,高度不要寫死休涤,給一個(gè)占位約束。
在設(shè)置數(shù)據(jù)時(shí)一定要注意疤剑,有配圖就設(shè)置上滑绒; 沒有配圖闷堡,一定要把image重新寫為nil。
在cell中設(shè)置最下方的底邊約束
2.2.1 添加預(yù)估行高疑故、自行計(jì)算行高
//預(yù)估行高
//自動(dòng)計(jì)算行高
self.tableView.rowHeight = UITableVIewAutomaticDimension;
2.2.2 設(shè)置cell最下方的底邊約束
// 設(shè)置contentView的底部約束
[self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self);
make.bottom.equalTo(moreBtn.mas_bottom).offset(10);
}];
2.2.3 占位約束
make.height.lessThanEqualTo(@150);
2.2.4 獲取cell最底的控件的最大的Y
這里分成兩種情況:
1杠览,如果最下方的控件有多個(gè),不太容易確定到底誰最下面纵势。就要用代碼一踱阿。
2,如果最下方的控件只有一個(gè)钦铁,可以直接確定最底部的控件软舌,用代碼二。
代碼一:
// 為了自動(dòng)設(shè)置行高牛曹,就必須對(duì)從contentView的底邊進(jìn)行約束
[self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self);
// 給底部添加了兩個(gè)約束,誰更高就用誰
make.bottom.greaterThanOrEqualTo(chatBackgroundView.mas_bottom).offset(8);
make.bottom.greaterThanOrEqualTo(headshotView.mas_bottom).offset(8);
}];
代碼二:
self.frame = CGReckMake(0,0,CGRectGetMaxY(最底部的控件.frame));
緩存cell高度
高度計(jì)算出來后佛点,但是如果這個(gè)高度值每次滑動(dòng)的時(shí)候由于cell的復(fù)用機(jī)制都會(huì)重新計(jì)算,若果這個(gè)cell的自定義樣式很復(fù)雜黎比,子視圖太多超营,那么大量的計(jì)算一定會(huì)損耗性能而導(dǎo)致明顯的卡頓,所以緩存機(jī)制就是個(gè)必要的措施
http://www.reibang.com/p/37d980974dbe