基本的用法不細(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。