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

我试图了解如何拥抱和抗压力真的工作。

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

在这里输入图像说明

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

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

 greenView.setContentHuggingPriority( UILayoutPriorityDefaultHigh, forAxis: .Horizontal) greenView.setContentCompressionResistancePriority( UILayoutPriorityDefaultHigh, forAxis: .Horizontal) 

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

任何人都知道原因?

一些想法(编辑):

从Ken的回答来看,你必须设置拥抱/压缩而不是容器视图的标签。

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

这样,左边的标签会试图拥抱他们的内容,但不会压缩它的内容。 例如,红色标签不能完全包装其内容,因为黄色标签不想压缩。

唷!

内容拥抱和压缩阻力优先级只与视图的内在内容大小有关。 基本上,如果一个视图具有内在的内容宽度,那么自动布局系统将它视为受到以下约束:

 [view(<=intrinsicWidth@contentHuggingPriority)] [view(>=intrinsicWidth@compressionResistancePriority)] 

这就是这些意思。 当然,这也适用于固有高度。

用作容器的普通UIView没有固有的大小。 所以,它的内容拥抱和压缩阻力的优先级是没有意义的。