UITableViewCell Xib約束問題

基本的用法不細(xì)說了,就是leading,trailing,top,bottom設(shè)置好約束。

今天Xcode自動(dòng)從8.3.3強(qiáng)制更新成了XCode9.2,導(dǎo)致了原來的cell約束,自動(dòng)計(jì)算高度都失效,不起作用,對(duì)Xib弄了幾個(gè)小時(shí),才發(fā)現(xiàn)是少了一句代碼:

tableView.rowHeight = UITableViewAutomaticDimension;//注意,這里是rowHeight,不是estimatedRowHeight

Xcode8 會(huì)自動(dòng)判斷是否是自動(dòng)計(jì)算高度,但Xcode9下少了這句,即使你設(shè)置了estimatedHeightForRowAtIndexPath的值,也會(huì)取默認(rèn)的rowHeight = 44.0;

Xib中,要自動(dòng)計(jì)算cell高度,約束除了要設(shè)置View之間的距離關(guān)系之外,還需要設(shè)置View自身的priority


Hugging Priority字面意思就是 ‘擁抱’,'抱緊'優(yōu)先級(jí)。有水平(horizontal)、垂直(vertical)方向之分;這個(gè)優(yōu)先級(jí)越大,表示抱得越緊,

比如有兩個(gè)label,label1和label2,垂直方向緊鄰彼此。label1 huggin priority = 251,label2??huggin priority = 252,那么如果要拉伸他們?nèi)ヌ畛湟粋€(gè)過大的區(qū)域,就只會(huì)拉伸label1,因?yàn)?label2的hugging(抱緊力度)更大。

Compression Resistance Priority,字面意思是‘壓縮抵抗優(yōu)先級(jí)’,Compression是外力壓縮,Resistance是抵抗。合起來就是‘抗壓縮’。

這個(gè)值越大,就越不容易被壓縮。

還是label1和label2,垂直方向緊鄰彼此。label1 Compression Resistance Priority?= 750,label2??Compression Resistance Priority = 751

假設(shè)label1內(nèi)容需要高度40,label2需要高度40,把他們約束在一個(gè)高度為50的空間,那么label2約束后的實(shí)際高度將是40,label1約束后的實(shí)際高度為10。因?yàn)閘abel2的‘抗壓縮’的力度更大。如果你把這個(gè)值設(shè)為1000,就是必須滿足我的‘自然’大小,系統(tǒng)要壓縮某個(gè)view的高度,那么你該壓縮誰(shuí)就壓縮誰(shuí),反正不能壓縮我!

需要自適應(yīng)高度的cell.xib,尤其要處理好各個(gè)View的 抗拉伸、抗壓縮的優(yōu)先級(jí)。一般而言只需要設(shè)置label、imageView,button這些自動(dòng)生成大小的View。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容