TableView高度計算

因為公司項目的計算高度library杜秸,經(jīng)常在ios7的幾個little version上發(fā)生crash,特發(fā)此文陆蟆。

要求Version >= IOS7.0
高度計算的歷程
<pre>

  • calucate manully,通過

[self.userComment.text boundingRectWithSize:<#(CGSize)#> options:<#(NSStringDrawingOptions)#> attributes:<#(nullable NSDictionary<NSString *,id> *)#> context:<#(nullable NSStringDrawingContext *)#>]<bre>
[self.userComment sizeThatFits:<#(CGSize)#>];
這樣的方法來計算高度贞言,最后把各種 margin 蛛淋、labelHeight句狼、textviewHeigt加在一起呐粘,逐步計算岗宣。

  • 在AutoLayout大家都認可之后蚂会,開始使用systemLayoutSizeFittingSize來計算高度
  • 然后就是iOS8的 self-sizing cell ,使用 frame layout 和 auto layout 都可以耗式。
    self.tableView.estimatedRowHeight = 213;
    self.tableView.rowHeight = UITableViewAutomaticDimension;
    </pre>



好了下面進入正題胁住。
首先計算高度趁猴,如果是固定高度,強烈推薦使用self.tableView.rowHeight這個屬性來設(shè)置高度彪见,這樣就避免了儡司,計算。讓界面更加的流暢余指,你懂得捕犬。
如果你重寫了代理方法。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
剛開始設(shè)置的屬性會被覆蓋酵镜。


下一個設(shè)置cell height的方法是self.tableView.estimatedRowHeight和代理方法-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
這兩個東西碉碉,也提高了tableview的性能,當(dāng)數(shù)據(jù)很多時淮韭,讓它不是那么卡頓垢粮。
為什么?以前都是根據(jù)數(shù)據(jù)源的個數(shù)靠粪,剛開始就計算所有的高度蜡吧。有了它之后呢,只有當(dāng)滑動到這里的時候才計算占键。


next is -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
在這里我們計算的時候我們需要一個專門來計算高度的cell斩跌,為什么呢,因為計算方法是view的一個實例方法在此方法里面捞慌。而且在-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath方法里耀鸦,cell的重用失效了···,這個很奇怪哈啸澡。
我們可以定義一個static 的cell來袖订,使用它的實例方法[cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]計算size,
在此之前調(diào)用一下更新約束的方法[cell layoutIfNeeded];讓計算更可靠點。
不過這里有個注意點嗅虏,在有多行l(wèi)abel的時候洛姑,需要指定它的寬度像這樣self.userComment.preferredMaxLayoutWidth = 293;否則它是不會換行的。

這樣計算下來高度還是不對皮服,為什么呢楞艾?
高度還差1,因為你計算的時contentview的高度龄广,cell的實際高度比contentview的高度還高1哦硫眯。
這種方法和以前相比已經(jīng)方便很多了,但是择同,計算的速度沒有手算的快两入,所以如果考慮不到位,卡頓現(xiàn)象就會很明顯敲才。

上面的方法需要同學(xué)對約束掌握熟練裹纳,保證上下左右都有約束支撐择葡。特別是在視圖很多的時候,約束很可能出現(xiàn)沖突剃氧,大家要靈活的運用priority敏储、content huggingcontent compression朋鞍,這些屬性解決沖突

有不足的地方請同學(xué)補充虹曙,謝謝。需要demo的同學(xué)留下地址

Tip

因為UILabel和UITextView番舆,都存在多行展示的問題,所以要下知道最大寬度矾踱,這里我們可以這樣

  • (void)layoutSubviews
    {
    [super layoutSubviews];
    myLabel.preferredMaxLayoutWidth = myLabel.frame.size.width;
    [super layoutSubviews];
    }
    第一次調(diào)用[super layoutSubviews]是為了獲得label現(xiàn)在的真實frame恨狈,第二次調(diào)用是為了更新布局。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呛讲,一起剝皮案震驚了整個濱河市禾怠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贝搁,老刑警劉巖吗氏,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異雷逆,居然都是意外死亡弦讽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門膀哲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來往产,“玉大人,你說我怎么就攤上這事某宪》麓澹” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵兴喂,是天一觀的道長蔼囊。 經(jīng)常有香客問我,道長衣迷,這世上最難降的妖魔是什么畏鼓? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮壶谒,結(jié)果婚禮上滴肿,老公的妹妹穿的比我還像新娘。我一直安慰自己佃迄,他們只是感情好泼差,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布贵少。 她就那樣靜靜地躺著,像睡著了一般堆缘。 火紅的嫁衣襯著肌膚如雪滔灶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天吼肥,我揣著相機與錄音录平,去河邊找鬼。 笑死缀皱,一個胖子當(dāng)著我的面吹牛斗这,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播啤斗,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼表箭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了钮莲?” 一聲冷哼從身側(cè)響起免钻,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎崔拥,沒想到半個月后极舔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡链瓦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年拆魏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慈俯。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡稽揭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肥卡,到底是詐尸還是另有隱情溪掀,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布步鉴,位于F島的核電站揪胃,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏氛琢。R本人自食惡果不足惜喊递,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望阳似。 院中可真熱鬧骚勘,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至泽疆,卻和暖如春户矢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背殉疼。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工梯浪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瓢娜。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓挂洛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親眠砾。 傳聞我的和親對象是個殘疾皇子虏劲,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355

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