iOS Cell子視圖添加約束后,動態(tài)計算Cell高度

注意:對于復雜的列表,不建議使用通過添加約束來計算cell高度。之前的項目中會有明顯的卡頓,后來手動計算frame處理的,就流暢多了。

之前看過其他人寫的相關(guān)博客,有些內(nèi)容不清楚,或者是沒有考慮周全。這里就對這個簡單的問題,進行相關(guān)的說明。對其中的細節(jié)問題,進行相應(yīng)的解釋。

這里主要討論,當cell中包含image,label,textView三類控件的時候,如何動態(tài)計算cell高度。其中image的大小是固定的,label和textView固定寬度后,高度根據(jù)內(nèi)容動態(tài)變化。

對cell上的控件添加必要的約束,其中cell的高度與image的大小無關(guān),image的大小固定。cell的子視圖label和textView在豎直和水平方向上與cell的距離固定。這樣,cell的高度就完全由cell的寬度和label或textView的內(nèi)容決定。(文章結(jié)尾源碼中可以查看)

給Cell添加約束

計算Cell的高度


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    TableViewCell1 *cell = tableViewCell;
    NSDictionary *dic = _dataArray[indexPath.row];
    cell.textView.text = dic[@"textViewText"];
    cell.label.text = dic[@"labelText"];

    //屏幕寬度-110 = label的寬度
    cell.label.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width - 110;
    //size 的大小為cell.contentView的大小,
    //在自動計算cell大小時,textView的長寬都是0;
    CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];

    //根據(jù)textView的內(nèi)容,計算textView的大小
    CGSize textViewSize = [cell.textView sizeThatFits:CGSizeMake([UIScreen mainScreen].bounds.size.width - 110, FLT_MAX)];

    //由于textView不會影響size的大小,所以比較出一個最大的高度值。
    CGFloat height = size.height + (textViewSize.height);
    height = height > 109 ?height : 109;
    return height + 1;
}

代碼中 height + 1 必不可少,不然某個控件的文字就顯示不出來。因為contentview的高度加上分割線的高度(1)才是Cell的高度。

這里是實現(xiàn)動態(tài)計算Cell高度的Demo地址:https://coding.net/u/hufeng/p/CellHeightDemo/git

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,431評論 4 61
  • 有始有終的那才叫愛情啊
    阿青呀閱讀 107評論 0 0
  • 定義: Unsupervised learning allows us to approach problems ...
    滄海月明豬有淚閱讀 433評論 0 0
  • 嵊縣板川訪贈賢弟明亮 黃磊/文 越秀靈毓鼎奇殊,板川鶴立賽名廚。 青山送吾至剡溪,圣水為鳴鼓與呼。 潔身守立去百污...
    黃磊的簡書閱讀 326評論 0 5
  • 下一秒究竟有多少種可能? 我睡夠了 那么醒來后有多少種可能? 沉默后 開口有多少種可能? 蟄伏后 蘇醒有多少種可能...
    Derek_Kun閱讀 331評論 0 2

友情鏈接更多精彩內(nèi)容