使用AutoLayOut根據文本顯示不等高的cell

這篇文章主要用于兼容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的專欄,這個作者寫得很詳細,有興趣可以去看看

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 我們在上一篇《通過代碼自定義不等高cell》中學習了tableView的相關知識,本文將在上文的基礎上,利用sto...
    啊世ka閱讀 1,533評論 2 7
  • 九十風云轉瞬間,軍魂鑄就永難刪。 雪山草地任危苦,萬水千山多險艱。 終竟滿腔騰熱血,曾經一路克雄關。 人民子弟兵威...
    雪窗_武立之閱讀 559評論 0 6
  • 我不能 把愛的全部 分一份給你 想要 你就全部拿去 我愛的池塘清澈見底 沒有獵奇者期待的秘密 偶爾 你也能看見幾條...
    Julien陸主歡閱讀 364評論 7 6
  • 一笑萬古春,一啼萬古愁。此情非你莫屬,此貌非你莫有。 李碧華在《霸王別姬》開篇便說:每一個人,有其依附之物。娃娃...
    秋山紗蘭閱讀 1,380評論 1 6
  • 文/韋劍 揮手告別的車站 淚眼朦朧的人 轉頭掩不住的憂傷 從此化作了思念 回首間 相送人已遠去 最后的一幕 才發現...
    韋劍閱讀 324評論 0 1