今天在项目中需要画一个这样的cell
cell的两个label约束如图,运行后钻石那个label不见了,因为在已有的约束的情况钻石label是永远在名字label的后面的
后来想起了Content Hugging 和 Content Compression属性
“Content Compression Resistance Priority”,叫内容压缩阻力优先级,优先级越高,则越晚轮到被压缩
“Content Hugging Priority”,叫内容紧靠优先级,优先级越高,越晚轮到被拉伸。
这里姓名应该是被压缩,而钻石要保持内容不被压缩
所以有两点(实现任意一点都可以实现效果)
1.钻石label应该比姓名label晚压缩,所以
姓名label的 Content Compression Resistance Priority(优先级越高,则越晚轮到被压缩)优先级比钻石label的高
2.姓名label应该比钻石label晚拉伸,所以
姓名label的Content Hugging Priority(优先级越高,越晚轮到被拉伸)优先级应该比钻石label的高
最后贴上两个约束的优先级图
先是姓名label的
然后是钻石label的
完全符合上面说的亮点,最后效果图
更新一下错误:
今天逛博客的时候发现,我这个理解其实是错误的。
NSLayoutConstraint有一个intrinsic size属性,返回的是根据label字符来算出来的准确尺寸。
Content Hugging:内容压缩,阻止视图的实际尺寸比intrinsicContentSize返回的更大
Content Compression Resistance:阻止内容压缩,阻止视图的实际尺寸比intrinsicContentSize返回的更小。
Content Hugging Priority:内容压缩优先级,默认为250
Content Compression Resistance Priority:阻止内容压缩优先级,默认为750。
所以这两个Priority是相对于intrinsic size来说的
比如上面的名字label的intrinsic size是比约束得到的宽度要大的,但是要保留宽度,因此label的NSlayout