关于AutoLayout原生Content Hugging和Content Resistance小研究

之前就知道系统`AutoLayout`有拉伸和挤压的设置,平时用`Masonry`设置优先级也是可以解决这样的挤压和压缩的问题

Imagem de capa

之前就知道系统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];

我们运行一下看一下。

设置成功。