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

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


当前回答

简要介绍一下这些概念:

拥抱=>内容不想增长 抗压缩性=>内容不想收缩

例子:

假设你有一个这样的按钮:

[       Click Me      ]

并且您已经将边缘固定到优先级为500的更大的父视图。

然后,如果拥抱优先级> 500,它将看起来像这样:

[Click Me]

如果拥抱优先级< 500,它会像这样:

[       Click Me      ]

如果父视图现在缩小,如果抗压缩优先级为> 500,它会像这样

[Click Me]

否则,如果抗压缩优先级< 500,它可能看起来像这样:

[Cli..]

如果它不像这样工作,那么你可能有其他的限制正在搞砸你的好工作!

例如,你可以把它固定在优先级为1000的父视图上。 或者你可以设置宽度优先级。如果是这样的话,下面的建议会很有帮助:

编辑器>大小适合内容

其他回答

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

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

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

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

苹果文档:

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

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

简要介绍一下这些概念:

拥抱=>内容不想增长 抗压缩性=>内容不想收缩

例子:

假设你有一个这样的按钮:

[       Click Me      ]

并且您已经将边缘固定到优先级为500的更大的父视图。

然后,如果拥抱优先级> 500,它将看起来像这样:

[Click Me]

如果拥抱优先级< 500,它会像这样:

[       Click Me      ]

如果父视图现在缩小,如果抗压缩优先级为> 500,它会像这样

[Click Me]

否则,如果抗压缩优先级< 500,它可能看起来像这样:

[Cli..]

如果它不像这样工作,那么你可能有其他的限制正在搞砸你的好工作!

例如,你可以把它固定在优先级为1000的父视图上。 或者你可以设置宽度优先级。如果是这样的话,下面的建议会很有帮助:

编辑器>大小适合内容

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