UITableViewCell的高度那些事

在項(xiàng)目開發(fā)中,我們經(jīng)常會(huì)使用到UITableViewCell,不管是我們自定義UITableViewCell還是使用系統(tǒng)的cell都免不了要計(jì)算cell的高度,這里我提供兩種方式來計(jì)算cell的高度

1. 純代碼+masonry

使用原理:用masonry來添加約束,UITableView自適應(yīng)高度
適用場(chǎng)景:任何cell

第一步:首先使用cocoapods安裝masonry ,cocoapods的詳細(xì)安裝點(diǎn)這里

第二步:新建cell后,初始化各種控件,使用masonry為其添加約束,在這里我們就基本上告別了initWithFrame方法,再也不用為給x,y,width,height而煩惱了

//兩個(gè)Label控件
UILabel *photo = [[UILabel alloc] init];
photo.text = @"附件啊佛劍分說家分店減肥了大家發(fā)多了幾分老大金利科技鄧麗君看來是減肥垃圾費(fèi)來得快積分來得及法律肯德基費(fèi)老大勁鋒利的積分累計(jì)的房間大放假啦幾點(diǎn)幾放辣椒放假會(huì)計(jì)法看電視積分";
photo.numberOfLines = 0;
photo.font = [UIFont boldSystemFontOfSize:15];
[self.contentView addSubview:photo];

//為photo添加約束
[photo mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.mas_equalTo(5);
    make.left.mas_equalTo(16);
    make.right.mas_equalTo(-16);
}];

UILabel *detialPhoto = [[UILabel alloc] init];
detialPhoto.font = [UIFont systemFontOfSize:14];
detialPhoto.numberOfLines = 0;
detialPhoto.text = @"這張照片記錄了我們?nèi)松谐砷L(zhǎng)的步伐,記錄了許多甜蜜或悲傷的一瞬間,見證了我們成長(zhǎng)的點(diǎn)滴,從中我們可以感受到兒時(shí)的天真、少年時(shí)的率性。每一個(gè)回憶都是那么珍貴,每當(dāng)回憶時(shí),就會(huì)真真切切的感受到那是的可笑,就好想讓時(shí)光逆流回到以前,讓一切從頭再來,仿佛以前都是一場(chǎng)夢(mèng),我總怕夢(mèng)會(huì)突然醒來,真想讓美好、幸福的一瞬間的心情也被定格下來,不過這是不可能的";
[self.contentView addSubview:detialPhoto];

//為detialPhoto添加約束
[detialPhoto mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(photo.mas_bottom).with.offset(10);
    make.left.equalTo(photo.mas_left);
    make.right.equalTo(photo.mas_right);
}];

第三步:給出預(yù)估高度,

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
  //計(jì)算cell的高度
  return UITableViewAutomaticDimension
}

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
  return 44; (這里給預(yù)估高度即可)
}
2. xib計(jì)算高度

使用原理:使用xib對(duì)控件添加約束,系統(tǒng)自動(dòng)計(jì)算cell的高度
使用優(yōu)點(diǎn):自動(dòng)計(jì)算cell的高度,無需我們操心
使用缺點(diǎn):一定要在垂直方向添加好約束,否則無法計(jì)算,并且對(duì)使用約束的要求較高

第一步:創(chuàng)建好自定義的cell,并對(duì)其中的控件添加好約束,同時(shí)設(shè)置控件的一些必要屬性

xib文件,垂直方向添加好約束,否則計(jì)算不出高度

第二步:連線、賦值,對(duì)于需要換行顯示的控件,需要對(duì)其設(shè)置preferredMaxLayoutWidth屬性,否則無法正常計(jì)算高度

- (void)awakeFromNib {

  self.fullText.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width - 48;
  self.fullDetialText.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width - 48;

  self.fullText.text = @"附件啊佛劍分說家分店減肥了大家發(fā)多了幾分老大金利科技鄧麗君看來是減肥垃圾費(fèi)來得快積分來得及法律肯德基費(fèi)老大勁鋒利的積分累計(jì)的房間大放假啦幾點(diǎn)幾放辣椒放假會(huì)計(jì)法看電視積分";

  self.fullDetialText.text = @"這張照片記錄了我們?nèi)松谐砷L(zhǎng)的步伐,記錄了許多甜蜜或悲傷的一瞬間,見證了我們成長(zhǎng)的點(diǎn)滴,從中我們可以感受到兒時(shí)的天真、少年時(shí)的率性。每一個(gè)回憶都是那么珍貴,每當(dāng)回憶時(shí),就會(huì)真真切切的感受到那是的可笑,就好想讓時(shí)光逆流回到以前,讓一切從頭再來,仿佛以前都是一場(chǎng)夢(mèng),我總怕夢(mèng)會(huì)突然醒來,真想讓美好、幸福的一瞬間的心情也被定格下來,不過這是不可能的";
 }

第三步:在控制器中設(shè)置cell的高度

//設(shè)置預(yù)高度,此高度跟xib畫好后contentView的高度一致
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {

  return 65;

  }

//計(jì)算cell的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {


  FullCell *cell = (FullCell *)[self tableView:_fullTableView cellForRowAtIndexPath:indexPath];

  [cell setNeedsUpdateConstraints];

  [cell updateConstraintsIfNeeded];

  CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];

  return size.height;
  }
3. 總結(jié)

在我們項(xiàng)目開發(fā)的過程中,這兩種計(jì)算cell的高度的方式足夠應(yīng)付各種復(fù)雜的界面,這兩種方式各有優(yōu)劣,針對(duì)自己的需求,選擇最簡(jiǎn)單的方式進(jìn)行開發(fā),如果你還有其他的方法,歡迎指教.

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

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,620評(píng)論 4 61
  • UITableViewCell 父類是UIView UITableView的每一行都是一個(gè)UITableViewC...
    翻這個(gè)墻閱讀 6,830評(píng)論 0 1
  • 轉(zhuǎn)自sunnyxx大神的博客 我是前言 這篇文章是我和我們團(tuán)隊(duì)最近對(duì) UITableViewCell 利用 Aut...
    iYeso閱讀 1,242評(píng)論 2 31
  • 我喜歡夏天 在人們躲在屋里避暑時(shí) 我可以穿著漂亮的裙子 打著簡(jiǎn)單的遮陽傘 在街道上肆意的穿梭著 我喜歡夏天 在太陽...
    酉木閱讀 377評(píng)論 5 1
  • 兩次記錄悲傷的過往都無法堅(jiān)持下去,悲傷的故事自己寫著寫著就深陷其中無法自拔,最后只能放棄投降。真實(shí)的故事必是有悲有...
    肖成燕閱讀 321評(píng)論 3 0

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