iOS性能優(yōu)化(二)UITableView自動計算Cell高度思路

上一篇:iOS性能優(yōu)化(一)常用小技巧

本文只介紹思路陈肛,具體代碼網(wǎng)上已經(jīng)有很多唆鸡,這里就不在粘貼了。希望正在閱讀的童鞋能理解思路脑慧,然后自己去實踐魄眉。

一:對于固定高度Cell的計算:

推薦:

tableView.rowHeight = 45;

不推薦:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

? ? return 45

}

二:對于動態(tài)高度Cell的計算:

1、手動計算

使用系統(tǒng)的boundingRect計算出文本的高度闷袒,然后:

Cell總高度 = 文本高度 + top距離 + bottom距離

cell

對于高度計算復雜的Cell坑律,計算后將高度緩存在對應Cell的數(shù)據(jù)Model里。在heightForRow返回高度前囊骤,先判斷一下Model是否緩存高度晃择,如果有值,就直接返回淘捡。如果沒值藕各,就去計算,緩存焦除,下次直接使用激况。

2、自動計算

使用iOS8的新特性膘魄。

tableView.estimatedRowHeight = 45;// 設(shè)置一個預估高度

tableView.rowHeight = UITableViewAutomaticDimension;// 告訴系統(tǒng)要自動計算高度(可省略)

前提是你已經(jīng)給Cell設(shè)置好了完整的約束

對于 estimatedRowHeight 的值乌逐,可以設(shè)置得和所有 Cell 的平均值一樣,這樣TableView可以計算最少的cell

在 iOS8 中使用了 Cell 自動高度之后创葡,你會發(fā)現(xiàn)浙踢,只要一個 Cell 需要被顯示到屏幕上,它的高度都會被計算一次灿渴,即使這個 Cell 在之前的滑動中已經(jīng)被計算過高度了洛波。之所以被設(shè)計成這樣的原因系統(tǒng)認為 Cell 的高度是隨時可能改變的胰舆。

3、手動+"自動"

如果Cell中既有圖片蹬挤,又有文本缚窿,我們想手動計算圖片,自動計算文本(使用sizeToFit計算)焰扳。

第一步倦零、首先設(shè)置預估高度和自動計算:

tableView.estimatedRowHeight = 45;

tableView.rowHeight = UITableViewAutomaticDimension;

第二步、如果你設(shè)置了1中的代碼吨悍,那么tableview執(zhí)行時扫茅,會先執(zhí)行cellForRow而不是直接執(zhí)行heightForRow。此時你就可以在Cel賦值的代碼里計算高度育瓜,然后把高度緩存在對應Cell的Model里葫隙。

第三步、實現(xiàn)heightForRow代理爆雹,并返回在Cell里已經(jīng)緩存的高度停蕉。


sizeToFit 和 sizeThatFits 的使用區(qū)別

蘋果官方解釋

// return 'best' size to fit given size. does not actually resize view. Default is return existing view size

let size = contentLabel.sizeThatFits(CGSize(width: 200, height: CGFLOAT_MAX))

// calls sizeThatFits: with current view bounds and changes bounds size.

contentLabel.sizeToFit()

sizeToFit:讓view自動根據(jù)內(nèi)容計算自己的bounds,并且修改自己的bounds钙态。sizeToFit最后也是調(diào)用的sizeThatFits。

sizeThatFits:會計算出最優(yōu)的 size 但是不會改變 自己的 size

下一篇:iOS性能優(yōu)化(三)頁面Push卡頓優(yōu)化

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末菇晃,一起剝皮案震驚了整個濱河市册倒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌磺送,老刑警劉巖驻子,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異估灿,居然都是意外死亡崇呵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門馅袁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來域慷,“玉大人,你說我怎么就攤上這事汗销∮贪” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵弛针,是天一觀的道長叠骑。 經(jīng)常有香客問我,道長削茁,這世上最難降的妖魔是什么宙枷? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任掉房,我火速辦了婚禮,結(jié)果婚禮上慰丛,老公的妹妹穿的比我還像新娘卓囚。我一直安慰自己,他們只是感情好璧帝,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布捍岳。 她就那樣靜靜地躺著,像睡著了一般睬隶。 火紅的嫁衣襯著肌膚如雪锣夹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天苏潜,我揣著相機與錄音银萍,去河邊找鬼。 笑死恤左,一個胖子當著我的面吹牛贴唇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播飞袋,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼戳气,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了巧鸭?” 一聲冷哼從身側(cè)響起瓶您,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纲仍,沒想到半個月后呀袱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡郑叠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年夜赵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乡革。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡寇僧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出署拟,到底是詐尸還是另有隱情婉宰,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布推穷,位于F島的核電站心包,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏馒铃。R本人自食惡果不足惜蟹腾,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一痕惋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧娃殖,春花似錦值戳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至芬首,卻和暖如春赴捞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背郁稍。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工赦政, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人耀怜。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓恢着,卻偏偏與公主長得像,于是被迫代替她去往敵國和親财破。 傳聞我的和親對象是個殘疾皇子掰派,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

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