UITableViewCell Xib约束问题

基本的用法不细说了,就是leading,trailing,top,bottom设置好约束。

今天Xcode自动从8.3.3强制更新成了XCode9.2,导致了原来的cell约束,自动计算高度都失效,不起作用,对Xib弄了几个小时,才发现是少了一句代码:

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

Xcode8 会自动判断是否是自动计算高度,但Xcode9下少了这句,即使你设置了estimatedHeightForRowAtIndexPath的值,也会取默认的rowHeight = 44.0;

Xib中,要自动计算cell高度,约束除了要设置View之间的距离关系之外,还需要设置View自身的priority


Hugging Priority字面意思就是 ‘拥抱’,'抱紧'优先级。有水平(horizontal)、垂直(vertical)方向之分;这个优先级越大,表示抱得越紧,

比如有两个label,label1和label2,垂直方向紧邻彼此。label1 huggin priority = 251,label2  huggin priority = 252,那么如果要拉伸他们去填充一个过大的区域,就只会拉伸label1,因为 label2的hugging(抱紧力度)更大。

Compression Resistance Priority,字面意思是‘压缩抵抗优先级’,Compression是外力压缩,Resistance是抵抗。合起来就是‘抗压缩’。

这个值越大,就越不容易被压缩。

还是label1和label2,垂直方向紧邻彼此。label1 Compression Resistance Priority = 750,label2  Compression Resistance Priority = 751

假设label1内容需要高度40,label2需要高度40,把他们约束在一个高度为50的空间,那么label2约束后的实际高度将是40,label1约束后的实际高度为10。因为label2的‘抗压缩’的力度更大。如果你把这个值设为1000,就是必须满足我的‘自然’大小,系统要压缩某个view的高度,那么你该压缩谁就压缩谁,反正不能压缩我!

需要自适应高度的cell.xib,尤其要处理好各个View的 抗拉伸、抗压缩的优先级。一般而言只需要设置label、imageView,button这些自动生成大小的View。

你可能感兴趣的:(UITableViewCell Xib约束问题)