iOS UITableViewCell高度自適應(yīng)

一螃诅、高度自適應(yīng)

高度自適應(yīng)這個功能比較簡單了枷踏,滿足下面三點即可:

  • 1菩暗、設(shè)置UITableViewrowHeightUITableViewAutomaticDimension,如:

    _tableView.rowHeight = UITableViewAutomaticDimension;/// 高度自適應(yīng)
    
  • 2旭蠕、移除UITableViewDelegate的代理heightForRowAtIndexPath停团,就是下面的代碼不要出現(xiàn)在頁面內(nèi)。

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    
    }
    
  • 3掏熬、設(shè)置好UITableViewCell內(nèi)的控件約束佑稠。如:

    UILabel *label = [[UILabel alloc] init];
    [self.contentView addSubview:label];
    
    [label mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(self.contentView).offset(8);
        make.left.mas_equalTo(self.contentView).offset(12);
        make.right.mas_equalTo(self.contentView).offset(-12);
        make.height.mas_greaterThanOrEqualTo(20).priorityHigh();
        make.bottom.mas_equalTo(self.contentView).offset(-16);
    }];
    

二、遇到的問題 & 解決方法

1旗芬、約束警告

[LayoutConstraints] Unable to simultaneously satisfy constraints.

Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
(
****
)
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.

上面的問題是由于系統(tǒng)判定代碼和編輯器中可能出現(xiàn)了重復(fù)約束舌胶,可以不做處理,跳過疮丛!解決辦法就是給有問題的約束**設(shè)置優(yōu)先級**幔嫂。

為什么會出現(xiàn)重復(fù)約束呢?如第一步中第三點誊薄,關(guān)于label的約束履恩,正常情況下設(shè)置topleft呢蔫、bottom似袁、right已經(jīng)可以確定一個控件的位置了,但是這里還設(shè)置了height的約束,這個height就是重復(fù)約束昙衅,給其設(shè)定優(yōu)先級priorityHigh()即可扬霜。

2、UILabel內(nèi)容展示不全

需求是完整展示多行文本而涉。代碼按常規(guī)方式寫完著瓶,但實際測試結(jié)果卻是在部分機(jī)型上,內(nèi)容展示不全啼县,顯示...材原。

解決方法:在設(shè)置完fontnumberOfLines之后季眷,再設(shè)置adjustsFontSizeToFitWidth余蟹。

但是在UITableViewUITableViewCell上的控件,設(shè)置完adjustsFontSizeToFitWidth之后子刮,發(fā)現(xiàn)內(nèi)容還是顯示不全威酒。這個時候需要額外設(shè)置preferredMaxLayoutWidth才能解決這個問題。

最終的效果就是:

UILabel *label = [[UILabel alloc] init];
label.font = PFFont_Regular(14);
label.numberOfLines = 0;
label.preferredMaxLayoutWidth = 200;
label.adjustsFontSizeToFitWidth = YES;
[self.contentView addSubview:label];

3挺峡、多個控件同時約束bottom

這里以簡單情況為例:

效果一 效果二

如上面表格所示葵孤,由于UILabel內(nèi)容的不確定性,UITableViewCell的高度需要根據(jù)多個控件來確定橱赠,可能是第一個控件尤仍,也可能是第二個控件。做法也比較簡單給兩個控件分別添加bottom約束狭姨。

/// 內(nèi)容1
UILabel *label1 = [[UILabel alloc] init];
label1.font = PFFont_Regular(14);
label1.numberOfLines = 0;
[self.contentView addSubview:label1];

[label1 mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.mas_equalTo(self.contentView.mas_bottom).offset(15);
    make.left.mas_equalTo(self.contentView).offset(15);
    make.width.mas_equalTo(100);
    make.height.mas_greaterThanOrEqualTo(20).priorityHigh();
    make.bottom.mas_equalTo(self.contentView).offset(-15);
}];

/// 內(nèi)容2
UILabel *label2 = [[UILabel alloc] init];
label2.font = PFFont_Regular(14);
label2.numberOfLines = 0;
[self.contentView addSubview:label2];

[label2 mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.mas_equalTo(self.contentView.mas_bottom).offset(15);
    make.right.mas_equalTo(self.contentView).offset(-15);
    make.width.mas_equalTo(100);
    make.height.mas_greaterThanOrEqualTo(20).priorityHigh();
    make.bottom.mas_equalTo(self.contentView).offset(-15);
}];

但是在實際情況下宰啦,上面情況中兩個UILabel的高度其實是一致的,這種情況下我的解決辦法是給Label文本居頂,具體做法參考文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饼拍,一起剝皮案震驚了整個濱河市绑莺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惕耕,老刑警劉巖纺裁,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異司澎,居然都是意外死亡欺缘,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門挤安,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谚殊,“玉大人,你說我怎么就攤上這事蛤铜∧坌酰” “怎么了丛肢?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長剿干。 經(jīng)常有香客問我蜂怎,道長,這世上最難降的妖魔是什么置尔? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任杠步,我火速辦了婚禮,結(jié)果婚禮上榜轿,老公的妹妹穿的比我還像新娘幽歼。我一直安慰自己,他們只是感情好谬盐,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布甸私。 她就那樣靜靜地躺著,像睡著了一般飞傀。 火紅的嫁衣襯著肌膚如雪皇型。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天助析,我揣著相機(jī)與錄音,去河邊找鬼椅您。 笑死外冀,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的掀泳。 我是一名探鬼主播雪隧,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼员舵!你這毒婦竟也來了脑沿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤马僻,失蹤者是張志新(化名)和其女友劉穎庄拇,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體韭邓,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡措近,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了女淑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞭郑。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鸭你,靈堂內(nèi)的尸體忽然破棺而出屈张,到底是詐尸還是另有隱情擒权,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布阁谆,位于F島的核電站碳抄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏笛厦。R本人自食惡果不足惜纳鼎,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望裳凸。 院中可真熱鬧贱鄙,春花似錦、人聲如沸姨谷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梦湘。三九已至瞎颗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捌议,已是汗流浹背哼拔。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留瓣颅,地道東北人倦逐。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像宫补,于是被迫代替她去往敵國和親檬姥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

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