我试图了解如何真正地拥抱和抗压。
在这种情况下,我需要在左侧(绿色容器内)和右侧(在蓝色容器内)两个标签。
如图所示,我希望绿色容器拥抱内容(Android的wrap content
),而蓝色容器填充剩余的空间(Android的fill_parent
)。
我以为我可以在绿色 View 中添加拥抱/压缩优先级,例如:
greenView.setContentHuggingPriority(
UILayoutPriorityDefaultHigh, forAxis: .Horizontal)
greenView.setContentCompressionResistancePriority(
UILayoutPriorityDefaultHigh, forAxis: .Horizontal)
但似乎无法正常工作。我必须将这些约束应用于(红色和黄色)标签。
有人知道原因吗?
一些想法(已编辑):
根据Ken的回答,您必须将标签设置为拥抱/压缩,而不是容器 View 。
在此问题的示例中,我将在左边的标签上设置例如750的拥抱(高)和1000的阻力(必需)。由于标签的默认设置为251(低+1)拥抱和750(高)阻力,因此左侧标签的拥抱和压缩效果会更大(750> 251和1000> 750)。同时,压缩程度将大于标签本身的承受力(1000> 750)。
这样,左侧的标签将尝试拥抱其内容,但压缩程度却不及此。例如,红色标签不能完全包装其内容,因为黄色标签不想压缩。
!
最佳答案
内容拥抱和抗压缩优先级仅与 View 的固有内容大小有关。基本上,如果 View 具有固有的内容宽度,则自动布局系统会将其视为受到以下约束:
[view(<=intrinsicWidth@contentHuggingPriority)]
[view(>=intrinsicWidth@compressionResistancePriority)]
那就是所有的意思。当然,内在高度也是如此。
用作容器的纯
UIView
没有固有大小。因此,其内容拥抱和抗压缩优先级没有意义。