設置Cell的行高:五種方法及優(yōu)先級

傳統(tǒng)意義上設置tableView的行高一共有四種方法暑中。等等钦讳,標題不是說有五種方法嘛。別著急掐暮,咱們先看四種最基本的方法蝎抽,最后再說第五種自動計算行高的方法。

1. 四種基本設置方法

1.1 通過代理方法設置

  • 此方法可以返回每一行的具體行高.
  • 代理方法設置行高調(diào)用次數(shù)特別高路克,效率很低樟结。有興致的同學可以在代理方法里面做一下輸出,在控制臺看看精算,輸出的頻率驚人狭吼。
  • 為了降低調(diào)用的頻率,最好設置一個預估行高殖妇。這里說的降低頻率也只是相對的噢刁笙,依然頻率不低。

代理方法調(diào)用頻率非常的原因是想算contentSize谦趣,(UITableView是UIScrollView的子疲吸,所以繼承了UIScrollView的屬性)。如果不知道每一行的行高前鹅,就沒有辦法計算出contentSize.

代理方法如下:

//這里我們讓偶數(shù)行行高為50摘悴,奇數(shù)行為100
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row % 2 == 0) {
        return 50;
    }
    return 100;
}

設置預估行高:

- (void)viewDidLoad {
    [super viewDidLoad];
    // 預估行高
    self.tableView.estimatedRowHeight = 200;
}

1.2. 通過屬性設置

  • cell的行高也可以在viewDidLoad中設置
- (void)viewDidLoad {
    [super viewDidLoad];  
    // 設置行高
    self.tableView.rowHeight = 10;
}

1.3. storyBoard中通過tableView設置

Paste_Image.png

1.4. storyBoard中通過cell設置

Paste_Image.png

2. 四種方法的優(yōu)先級

  • 優(yōu)先等級最高:通過代理方法設置的行高
  • 次高:通過屬性設置的
  • 通過stroyBoard中tableView設置的
  • 通過stroyBoard中cell設置的

說明: 此處也不能算是嚴格意義上的優(yōu)先等級。

  • 造成這種狀況舰绘,是因為手機啟動APP的順序決定的蹂喻。
  • APP在一啟動就會去通過storyBoard加載葱椭,這樣就導致了storyBoard中設置的內(nèi)容最早被加載。最后加載代理方法口四,這樣會將之前設置的內(nèi)容進行覆蓋孵运。

3. 自動進行計算cell的行高

終于來了第五種方法,這里設置約束的時候用到Masonry的第三方框架蔓彩。木有用過的童鞋可以從文章下方看到之前的分享鏈接了解治笨。

在實際開發(fā)中,很少有寫死cell高度的赤嚼。因為每個cell的內(nèi)容不太一樣旷赖,不太可能都保持統(tǒng)一的高度。當然有處女情結的產(chǎn)品經(jīng)理手頭出來的項目例外更卒,哈哈~

3.1. 步驟

  • 在controller中設置預估行高和行高的自動計算
  • 在cell中設置最下方的底邊約束
  • 如果cell中有配圖等孵,而且是有的cell有,有的cell沒有蹂空。給配圖控件添加約束時俯萌,高度不要寫死,給一個占位約束腌闯。在設置數(shù)據(jù)時一定要注意绳瘟,有配圖就設置上; 沒有配圖姿骏,一定要把image重新寫為nil糖声。
  • 我們平時設置約束很多都是上左寬高,不管底邊。但是,tableView計算行高是需要有一個底邊的約束,才能自動的根據(jù)內(nèi)容設置cell的高度
  • 用代碼給cell內(nèi)部子控件設置約束自動計算行高時,最好給contentView設置"頂部"底部"及寬度約束

3.2 具體實施

3.2.1 添加預估行高分瘦、自行計算行高

//預估行高
//自動計算行高
self.tableView.rowHeight = UITableVIewAutomaticDimension;

3.2.2 設置cell最下方的底邊約束

//    設置contentView的底部約束
[self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self);
make.bottom.equalTo(moreBtn.mas_bottom).offset(DEFAULT_MARGIN);
}];

3.2.3 占位約束

make.height.lessThanEqualTo(@150);
}];

3.2.4 獲取cell最底的控件的最大的Y

這里分成兩種情況:
1蘸泻,如果最下方的控件有多個,不太容易確定到底誰最下面嘲玫。就要用代碼一悦施。
2,如果最下方的控件只有一個去团,可以直接確定最底部的控件抡诞,用代碼二。

代碼一:

   //    為了自動設置行高土陪,就必須對從contentView的底邊進行約束
    [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self);
        
        // 給底部添加了兩個約束,誰更高就用誰
        make.bottom.greaterThanOrEqualTo(chatBackgroundView.mas_bottom).offset(8);
        make.bottom.greaterThanOrEqualTo(headshotView.mas_bottom).offset(8);
    }];

代碼二:

self.frame = CGReckMake(0,0,CGRectGetMaxY(最底部的控件.frame));

好啦~從此媽媽再也不用擔心我設置cell行高了昼汗。
自動行高的demo在這里:戳我戳我

寫完demo上傳了之后才發(fā)現(xiàn),沒寫注釋鬼雀。顷窒。。如果有看不懂的童鞋留言哈源哩,我再補充一下注釋鞋吉。

特別感謝@緣之有緣的評論哦鸦做。

之所以說是第五種,是因為基本的設置其實就依然還是4種方法谓着,根據(jù)基本的方法可以延伸出來第六種泼诱、第七種、第八種漆魔。坷檩。却音。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末改抡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子系瓢,更是在濱河造成了極大的恐慌阿纤,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夷陋,死亡現(xiàn)場離奇詭異欠拾,居然都是意外死亡,警方通過查閱死者的電腦和手機骗绕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門藐窄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人酬土,你說我怎么就攤上這事荆忍。” “怎么了撤缴?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵刹枉,是天一觀的道長。 經(jīng)常有香客問我屈呕,道長微宝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任虎眨,我火速辦了婚禮蟋软,結果婚禮上,老公的妹妹穿的比我還像新娘嗽桩。我一直安慰自己岳守,他們只是感情好,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布涤躲。 她就那樣靜靜地躺著棺耍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪种樱。 梳的紋絲不亂的頭發(fā)上蒙袍,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天俊卤,我揣著相機與錄音,去河邊找鬼害幅。 笑死消恍,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的以现。 我是一名探鬼主播狠怨,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼邑遏!你這毒婦竟也來了佣赖?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤记盒,失蹤者是張志新(化名)和其女友劉穎憎蛤,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纪吮,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡俩檬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了碾盟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棚辽。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖冰肴,靈堂內(nèi)的尸體忽然破棺而出屈藐,到底是詐尸還是另有隱情,我是刑警寧澤嚼沿,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布估盘,位于F島的核電站,受9級特大地震影響骡尽,放射性物質(zhì)發(fā)生泄漏遣妥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一攀细、第九天 我趴在偏房一處隱蔽的房頂上張望箫踩。 院中可真熱鬧,春花似錦谭贪、人聲如沸境钟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽慨削。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缚态,已是汗流浹背磁椒。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留玫芦,地道東北人浆熔。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像桥帆,于是被迫代替她去往敵國和親医增。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

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

  • 我們在上一篇《通過代碼自定義不等高cell》中學習了tableView的相關知識老虫,本文將在上文的基礎上叶骨,利用sto...
    啊世ka閱讀 1,501評論 2 7
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件张遭、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,064評論 4 62
  • 愿我們都能學會尊重和接受別人與我們不相同的生活方式邓萨。 01 最近喜歡上化妝地梨。 早上起得不早不晚菊卷,起床,洗漱宝剖,然后坐...
    秦苗條閱讀 429評論 2 7
  • 不想洁闰,不能退縮 沒有路又如何 笑著抬頭,神若霞 心如飛万细,已過黃河 飛越世界的靈光 已踏平這坎坷 靈魂的渡口 一線靈...
    文山鹿閱讀 242評論 62 23
  • // JSon let jsonString = "{\"menu\": {" + "\"id\": \"file...
    fordring2008閱讀 351評論 0 0