UITableViewCell的高度那些事

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

1. 純代碼+masonry

使用原理:用masonry來添加約束芹枷,UITableView自適應(yī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的步伐厚掷,記錄了許多甜蜜或悲傷的一瞬間弟灼,見證了我們成長的點(diǎn)滴,從中我們可以感受到兒時(shí)的天真冒黑、少年時(shí)的率性田绑。每一個(gè)回憶都是那么珍貴,每當(dāng)回憶時(shí)抡爹,就會(huì)真真切切的感受到那是的可笑掩驱,就好想讓時(shí)光逆流回到以前,讓一切從頭再來冬竟,仿佛以前都是一場夢欧穴,我總怕夢會(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對控件添加約束笑诅,系統(tǒng)自動(dòng)計(jì)算cell的高度
使用優(yōu)點(diǎn):自動(dòng)計(jì)算cell的高度调缨,無需我們操心
使用缺點(diǎn):一定要在垂直方向添加好約束,否則無法計(jì)算吆你,并且對使用約束的要求較高

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

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

第二步:連線、賦值砌梆,對于需要換行顯示的控件默责,需要對其設(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的步伐咸包,記錄了許多甜蜜或悲傷的一瞬間桃序,見證了我們成長的點(diǎn)滴,從中我們可以感受到兒時(shí)的天真烂瘫、少年時(shí)的率性媒熊。每一個(gè)回憶都是那么珍貴,每當(dāng)回憶時(shí)坟比,就會(huì)真真切切的感受到那是的可笑芦鳍,就好想讓時(shí)光逆流回到以前,讓一切從頭再來葛账,仿佛以前都是一場夢柠衅,我總怕夢會(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)劣,針對自己的需求呜达,選擇最簡單的方式進(jìn)行開發(fā)谣蠢,如果你還有其他的方法,歡迎指教.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末查近,一起剝皮案震驚了整個(gè)濱河市眉踱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌霜威,老刑警劉巖谈喳,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異侥祭,居然都是意外死亡叁执,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門矮冬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谈宛,“玉大人,你說我怎么就攤上這事胎署∵郝迹” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵琼牧,是天一觀的道長恢筝。 經(jīng)常有香客問我哀卫,道長,這世上最難降的妖魔是什么撬槽? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任此改,我火速辦了婚禮,結(jié)果婚禮上侄柔,老公的妹妹穿的比我還像新娘共啃。我一直安慰自己,他們只是感情好暂题,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布移剪。 她就那樣靜靜地躺著,像睡著了一般薪者。 火紅的嫁衣襯著肌膚如雪纵苛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天言津,我揣著相機(jī)與錄音攻人,去河邊找鬼。 笑死纺念,一個(gè)胖子當(dāng)著我的面吹牛贝椿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播陷谱,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼烙博,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了烟逊?” 一聲冷哼從身側(cè)響起渣窜,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宪躯,沒想到半個(gè)月后乔宿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡访雪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年详瑞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片臣缀。...
    茶點(diǎn)故事閱讀 40,424評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡坝橡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出精置,到底是詐尸還是另有隱情计寇,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站番宁,受9級特大地震影響元莫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蝶押,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一踱蠢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧播聪,春花似錦朽基、人聲如沸布隔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衅檀。三九已至招刨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哀军,已是汗流浹背沉眶。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留杉适,地道東北人谎倔。 一個(gè)月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像猿推,于是被迫代替她去往敵國和親片习。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容

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