我试图了解拥抱和抗压力是如何起作用的。
我有这种情况,我需要左边的两个标签(绿色容器内)和右边的两个标签(蓝色容器内)。
如图所示,我希望绿色容器拥抱内容(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)。
这样,左边的标签会尝试拥抱它们的内容,但不会压缩它。例如,红色标签无法完全包裹其内容,因为黄色标签不想压缩。
呼!
答案 0 :(得分:17)
内容拥抱和抗压缩优先级仅与视图的内在内容大小有关。基本上,如果视图具有内在的内容宽度,那么自动布局系统会将其视为受到以下约束的约束:
[view(<=intrinsicWidth@contentHuggingPriority)]
[view(>=intrinsicWidth@compressionResistancePriority)]
这就是所有这些意思。当然,这同样适用于内在高度。
用作容器的普通UIView
没有内在大小。因此,其内容拥抱和压缩阻力优先级毫无意义。