我试图了解拥抱和抗压阻力是如何真正发挥作用的。
我有这样的场景,我需要左侧两个标签(绿色容器内)和右侧两个标签(蓝色容器内)。
如图所示,我希望绿色容器能够容纳内容(Android 的wrap content
)和蓝色容器来填充剩余空间(Androidfill_parent
).
我想我可以在绿色视图中添加拥抱/压缩优先级,例如:
greenView.setContentHuggingPriority(
UILayoutPriorityDefaultHigh, forAxis: .Horizontal)
greenView.setContentCompressionResistancePriority(
UILayoutPriorityDefaultHigh, forAxis: .Horizontal)
但似乎并没有达到预期的效果。我必须将这些约束应用到(红色和黄色)标签。
有人知道原因吗?
一些想法(已编辑):
从 Ken 的回答可以看出,您必须为标签而不是容器视图设置拥抱/压缩。
在此问题的示例中,我会为左侧的标签设置 750(高)的拥抱度和 1000(必需)的阻力。由于标签的默认拥抱值为 251(低+1),电阻为 750(高),因此左侧标签的拥抱和压缩会更大(750 > 251 和 1000 > 750)。同时,压缩将大于标签内的拥抱(1000 > 750)。
这样,左侧的标签将尝试拥抱其内容,但不会压缩它。例如,红色标签无法完全包裹其内容,因为黄色标签不想压缩。
Phew!
内容拥抱和压缩阻力优先级仅对视图的内在内容大小有意义。基本上,如果视图具有固有的内容宽度,则自动布局系统会将其视为受以下约束:
[view(<=intrinsicWidth@contentHuggingPriority)]
[view(>=intrinsicWidth@compressionResistancePriority)]
这就是所有这些意思。当然,这同样适用于固有高度。
A plain UIView
用作容器没有固有尺寸。因此,其内容拥抱和抗压缩优先级是没有意义的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)