关于AutoLayout原生Content Hugging和Co
之前就知道系统AutoLayout
有拉伸和挤压的设置,平时用Masonry
设置优先级也是可以解决这样的挤压和压缩的问题。但是设置Masonry的优先级自己一直设置不好。可能自己太菜了,或者自己对于Masonry研究的不是很精通。
今天用Reveal调试设置了一下竟然达到了自己预想的结果,所以今天就仔细的研究一下。
看来默认的Content Hugging的默认值是250,我只要轻轻的增加一个,就压缩了。
从上面的图中我们可以得到:
Content Hugging: 默认大小250
Content Resistance: 默认大小750
关于一些详细的介绍可以看我的小伙伴的文章 Masonry 笔记
- (UILayoutPriority)contentHuggingPriorityForAxis:(UILayoutConstraintAxis)axis NS_AVAILABLE_IOS(6_0);
- (void)setContentHuggingPriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis NS_AVAILABLE_IOS(6_0);
- (UILayoutPriority)contentCompressionResistancePriorityForAxis:(UILayoutConstraintAxis)axis NS_AVAILABLE_IOS(6_0);
- (void)setContentCompressionResistancePriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis NS_AVAILABLE_IOS(6_0);
UILayoutPriority
布局优先级用于向基于约束的布局系统指示哪些约束更重要,从而允许系统在满足系统整体的约束时进行适当的权衡
UILayoutPriorityRequired:1000
必需的约束。 不要指定超过此数字的布局约束。
UILayoutPriorityDefaultHigh:750
这是按钮抵抗其内容压缩的优先级。
UILayoutPriorityDefaultLow:250
这是按钮在水平方向上拥抱其内容的优先级。
UILayoutPriorityFittingSizeLevel:50
当向一个视图发送一个systemLayoutSizeFittingSize:
消息时,计算最接近目标大小的大小。 这是视图希望在该计算中符合目标大小的优先级。 这是相当低。 通常不恰当地在这个优先级上进行约束。 你想要更高或更低。
UILayoutConstraintAxis
UILayoutConstraintAxisHorizontal
: 水平约束
UILayoutConstraintAxisVertical
: 竖直约束
我们根据上面说的根据我们刚才Reveal
设置250以上就是UILayoutPriorityDefaultHigh
,设置水平UILayoutConstraintAxisHorizontal
[_locationTitleLabel setContentHuggingPriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisHorizontal];
我们运行一下看一下。
设置成功。