嵌套视图中的拥抱和压缩阻力

Fer*_*nch 5 ios autolayout

我试图了解拥抱和抗压力是如何起作用的.

我有这种情况,我需要左边的两个标签(绿色容器内)和右边的两个标签(蓝色容器内).

在此输入图像描述

如图所示,我希望绿色容器拥抱内容(Android's wrap content)和蓝色容器以填充剩余空间(Android's fill_parent).

我想我可以在绿色视图中添加拥抱/压缩优先级,例如:

greenView.setContentHuggingPriority(
    UILayoutPriorityDefaultHigh, forAxis: .Horizontal)
greenView.setContentCompressionResistancePriority(
    UILayoutPriorityDefaultHigh, forAxis: .Horizontal)
Run Code Online (Sandbox Code Playgroud)

但似乎它没有按预期工作.我必须将这些约束应用于(红色和黄色)标签.

谁知道原因?

一些想法(编辑):

根据Ken的回答,您必须将拥抱/压缩设置为标签而不是容器视图.

在这个问题的例子中,我会设置一个拥抱750(高)和1000(必需)的阻力到左边的标签.由于标签的默认值为251(低+ 1)和750(高)的阻力,因此左侧标签(750> 251和1000> 750)的拥抱和压缩将更大.同时,压缩将大于标签内的拥抱(1000> 750).

这样,左侧的标签将尝试拥抱其内容,但不会压缩它.例如,红色标签无法完全包裹其内容,因为黄色标签不想压缩.

唷!

Ken*_*ses 18

内容拥抱和压缩阻力优先级仅具有与视图的内在内容大小相关的含义.基本上,如果视图具有内在内容宽度,则自动布局系统会将其视为受到以下约束的约束:

[view(<=intrinsicWidth@contentHuggingPriority)]
[view(>=intrinsicWidth@compressionResistancePriority)]
Run Code Online (Sandbox Code Playgroud)

这就是所有这些意思.当然,这同样适用于固有高度.

UIView用作容器的平原没有固有的尺寸.因此,其内容拥抱和压缩阻力优先级毫无意义.

  • 很高兴能为您提供帮助。您可以参考[概念指南](https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/AnatomyofaConstraint.html#//apple_ref/doc/uid/ TP40010853-CH9-SW21)更有帮助。 (2认同)