我在苹果文档中找不到关于Cocoa Autolayout内容拥抱和抗压缩之间差异的明确答案。

有人能解释一下它们的用法和区别吗?


当前回答

内容拥抱优先级就像放置在视图周围的橡皮筋。 优先级值越高,橡皮筋越强,它就越想拥抱它的内容大小。 优先级值可以想象成橡皮筋的“强度”

内容压缩阻力是指一个视图“抵抗”变小的程度 阻力优先级值较高的视图将抗压缩。

其他回答

看看这个关于自动布局的视频教程,他们解释得很仔细

来源: @mokagio

内在内容大小——这是不言自明的,但具有可变内容的视图会意识到其内容的大小,并通过此属性描述其内容的大小。一些具有固有内容大小的视图的明显例子是UIImageViews, UILabels, UIButtons。

内容拥抱优先级——这个优先级越高,视图就越能抵抗比其固有内容大小更大的增长。

内容抗压缩优先级——该优先级越高,视图越能抵抗缩小到小于其固有内容大小的情况。

查看这里更多的解释:自动布局魔术:内容大小优先级

假设你有一个文本为“Click Me”的按钮。这个按钮的宽度应该是多少?

首先,你肯定不希望按钮比文本小。否则,文本将被剪切。这是抗水平压缩的优先级。

其次,你不希望按钮比实际需要的要大。一个按钮,看起来像这样 , [           点击我           ], 显然太大了。你想让按钮“拥抱”它的内容而没有太多的填充。这是水平内容拥抱优先级。对于按钮来说,它不如水平抗压缩优先级强。

contentcompressionresistancpriority -当没有足够的空间来适应所有的intrinsicContentSize时,具有最低值的视图将被截断

contentHuggingPriority—当有剩余空间需要填充时,具有最低值的视图将扩展到其intrinsicContentSize之外

内容拥抱和内容抗压缩优先级适用于那些可以根据进入的内容计算自身大小的元素。

苹果文档: