這篇文章主要用于兼容iOS7系統,在iOS8以上直接一句代碼系統就可以幫你算出cell的高度,有興趣的朋友可以自己搜下。以下列出這個例子的代碼流程
常規的創建一個控制器帶一個tableview視圖,在控制器.m文件中傳遞模型數據,這里注意下:在模型中加入一個存儲cell高度的屬性用于緩存cell高度,增強視圖滑動的流暢性。
-
通過xib自定義一個cell,在這個例子中的cell上加一個UILabel,并設置上下左右的約束。
cell的內部約束 在cell中有一個很重要的操作,UILable多行時必須設置preferredMaxLayoutWidth屬性,不然系統無法確定UILabel的寬度
self.aLabel.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width-16;
- 實現tableview代理方法1,這個方法可以避免一初始化控制器系統就計算全部cell的高度,消耗資源,使用這個方法好處就是系統只會先算顯示在屏幕的cell高度.
-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
- 實現代理方法2,這個是重頭戲,主要用到systemLayoutSizeFittingSize:這個方法就可以得到cell的高度
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (_prototyCell == nil) {
_prototyCell = [tableView dequeueReusableCellWithIdentifier:@"Custom"];
}
DataEntity *dataEntity = self.dataSource[indexPath.row];
if (dataEntity.cellH<=0) {
_prototyCell.aLabel.text = dataEntity.title;
dataEntity.cellH = [_prototyCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height+0.5;
}
return dataEntity.cellH;
}
寫這篇文章是為了記錄自己學習這個的過程,學習這個主要是在這里看到lishichao706的專欄,這個作者寫得很詳細,有興趣可以去看看