iOS8新特性Self Sizing Cells,使用estimatedRowHeight自適應(yīng)cell

本文章主要介紹iOS8之后蘋(píng)果推出的一個(gè)新特性Self Sizing Cells,意思就是讓cell自己計(jì)算自己的高度昆禽,當(dāng)我們?cè)赾ell里面添加完所需控件蝗蛙,并約束好位置之后,我們只需要設(shè)置

tableView.estimatedRowHeight = 44.0f;//推測(cè)高度醉鳖,必須有捡硅,可以隨便寫(xiě)多少
tableView.rowHeight =UITableViewAutomaticDimension;//iOS8之后默認(rèn)就是這個(gè)值,可以省略
這兩句代碼之后盗棵,即可放心的往cell的控件里面加上內(nèi)容壮韭,cell會(huì)根據(jù)內(nèi)部所有控件的高度動(dòng)態(tài)的計(jì)算自己的高度從而顯示出來(lái)北发。這個(gè)就有點(diǎn)類(lèi)似于html5中的body,會(huì)根據(jù)自己內(nèi)部的內(nèi)容調(diào)整自己的大小喷屋。這就給iOS開(kāi)發(fā)者提供了很大的便利琳拨,不再需要之前復(fù)雜的自適應(yīng)計(jì)算方法。但是要注意的是屯曹,這個(gè)需要在iOS8之后才可以使用狱庇,如果你的應(yīng)用要適配iOS8之前的版本,可能無(wú)法使用該機(jī)制恶耽,當(dāng)然也可以對(duì)系統(tǒng)版本進(jìn)行判斷之后再?zèng)Q定使用哪一套適配方案密任。廢話不多說(shuō),貼代碼偷俭。RootViewController:

import "RootViewController.h"

import "TestTableViewCell.h"

@interface RootViewController ()<UITableViewDelegate,UITableViewDataSource>

@property (nonatomic,strong) NSMutableArray * dataSource;

@end

@implementation RootViewController

  • (void)viewDidLoad {
    [superviewDidLoad];

    //建立一個(gè)隨機(jī)字符串的數(shù)據(jù)源
    self.dataSource = [NSMutableArraynew];
    NSString * str1 =@"ell中有上下兩個(gè) Label浪讳,上面的Label只有一行文本(lines為1),所以高度在運(yùn)行時(shí)不會(huì)改變涌萤,但下面的Label是多行文本(lines為0)淹遵,運(yùn)行時(shí)其高度會(huì)根據(jù)文本內(nèi)容自動(dòng)增長(zhǎng)。左圖中的自動(dòng)布局是正確的形葬,因此運(yùn)行時(shí)單元格能夠自適應(yīng)高度合呐。這是因?yàn)?a target="_blank" rel="nofollow">iOS能夠根據(jù)cell的contentView中的各個(gè)子View計(jì)算出cell的正常高度,計(jì)算方式為:cell高度 = 第1個(gè)Label的top+第1個(gè)Label高度+第2個(gè)Label的top+第2個(gè)Label高度(根據(jù)內(nèi)容自動(dòng)計(jì)算)+第2個(gè)Label的bottom但是當(dāng)我們將第2個(gè)Label的top約束(或者bottom約束)刪除笙以,如右圖所示淌实,我們已經(jīng)把圖中紅框所示位置的約束刪除了,則iOS無(wú)法計(jì)算單元格的高度了猖腕。因?yàn)樯鲜龉街械囊粋€(gè)變量缺失拆祈。這樣運(yùn)行時(shí)表格中的所有cell都是固定高度,cell之間會(huì)發(fā)生重疊倘感,同時(shí)控制臺(tái)會(huì)報(bào)錯(cuò):Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell’s content view. We’re considering the collapse unintentional and using standard height instead.";
    NSString * str2 =@"運(yùn)行時(shí)其高度會(huì)根據(jù)文本內(nèi)容自動(dòng)增長(zhǎng)放坏。左圖中的自動(dòng)布局是正確的,因此運(yùn)行時(shí)單元格能夠自適應(yīng)高度老玛。這是因?yàn)閕OS能夠根據(jù)cell的contentView中的各個(gè)子View計(jì)算出cell的正常高度";
    NSString * str3 =@"如右圖所示淤年,我們已經(jīng)把圖中紅框所示位置的約束刪除了,則iOS無(wú)法計(jì)算單元格的高度了蜡豹。因?yàn)樯鲜龉街械囊粋€(gè)變量缺失麸粮。這樣運(yùn)行時(shí)表格中的所有cell都是固定高度,cell之間會(huì)發(fā)生重疊镜廉,同時(shí)控制臺(tái)會(huì)報(bào)錯(cuò):Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell’s content view. We’re considering the collapse unintentional and using standard height instead.";
    for (int i = 0; i < 24; i++) {
    if (i%3 == 0) {
    [self.dataSourceaddObject:str1];
    }else if (i%3 == 1){
    [self.dataSourceaddObject:str2];
    }else{
    [self.dataSourceaddObject:str3];
    }
    }

    //創(chuàng)建一個(gè)表格視圖
    UITableView * tableView = [[UITableViewalloc] initWithFrame:[UIScreenmainScreen].boundsstyle:UITableViewStylePlain];
    tableView.dataSource = self;
    tableView.delegate = self;
    [tableView registerNib:[UINibnibWithNibName:@"TestTableViewCell"bundle:nil]forCellReuseIdentifier:@"CELLID"];//TestTableViewCell是使用xib創(chuàng)建弄诲,可以直接拉約束

    //關(guān)鍵就是這兩句代碼,cell拉好約束寫(xiě)上這兩句代碼娇唯,然后它就會(huì)根據(jù)自己的內(nèi)容計(jì)算高度了
    tableView.estimatedRowHeight = 44.0f;//推測(cè)高度齐遵,必須有寂玲,可以隨便寫(xiě)多少
    tableView.rowHeight =UITableViewAutomaticDimension;//iOS8之后默認(rèn)就是這個(gè)值,可以省略

    [self.viewaddSubview:tableView];

}

  • (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
    returnself.dataSource.count;
    }

  • (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    TestTableViewCell * cell = [tableViewdequeueReusableCellWithIdentifier:@"CELLID"forIndexPath:indexPath];
    cell.label1.text =@"測(cè)試";
    cell.label2.text =self.dataSource[indexPath.row];
    return cell;
    }

TestTableViewCell是使用xib進(jìn)行創(chuàng)建的梗摇,里面有兩個(gè)cell拓哟,拉好約束,一定要注意拉約束要遵循從左到右留美,從上到下的規(guī)律彰檬。最終運(yùn)行效果如下:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市谎砾,隨后出現(xiàn)的幾起案子逢倍,更是在濱河造成了極大的恐慌,老刑警劉巖景图,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件较雕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡挚币,警方通過(guò)查閱死者的電腦和手機(jī)亮蒋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)妆毕,“玉大人慎玖,你說(shuō)我怎么就攤上這事〉颜常” “怎么了趁怔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)薪前。 經(jīng)常有香客問(wèn)我润努,道長(zhǎng),這世上最難降的妖魔是什么示括? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任铺浇,我火速辦了婚禮,結(jié)果婚禮上垛膝,老公的妹妹穿的比我還像新娘鳍侣。我一直安慰自己,他們只是感情好吼拥,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布倚聚。 她就那樣靜靜地躺著,像睡著了一般扔罪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上桶雀,一...
    開(kāi)封第一講書(shū)人閱讀 51,624評(píng)論 1 305
  • 那天矿酵,我揣著相機(jī)與錄音唬复,去河邊找鬼。 笑死全肮,一個(gè)胖子當(dāng)著我的面吹牛敞咧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播辜腺,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼休建,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了评疗?” 一聲冷哼從身側(cè)響起测砂,我...
    開(kāi)封第一講書(shū)人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎百匆,沒(méi)想到半個(gè)月后砌些,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡加匈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年存璃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雕拼。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纵东,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出啥寇,到底是詐尸還是另有隱情偎球,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布示姿,位于F島的核電站甜橱,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏栈戳。R本人自食惡果不足惜岂傲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望子檀。 院中可真熱鬧镊掖,春花似錦、人聲如沸褂痰。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)缩歪。三九已至归薛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背主籍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工习贫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人千元。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓苫昌,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親幸海。 傳聞我的和親對(duì)象是個(gè)殘疾皇子祟身,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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