嵌套视图中的拥抱和抗压性
Posted
技术标签:
【中文标题】嵌套视图中的拥抱和抗压性【英文标题】:hugging and compression resistance in nested views 【发布时间】:2015-11-21 11:31:14 【问题描述】:我试图了解拥抱和抗压的真正作用。
我有这种情况,我需要在左侧(绿色容器内)有两个标签,在右侧(在蓝色容器内)需要两个标签。
如图所示,我希望绿色容器包含内容(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)。
这样,左侧的标签会尝试拥抱它们的内容,但不会像压缩它那样多。例如,红色标签不能完全包裹其内容,因为黄色标签不想压缩。
呼!
【问题讨论】:
【参考方案1】:内容拥抱和抗压缩优先级仅对视图的内在内容大小有意义。基本上,如果视图具有固有的内容宽度,那么自动布局系统会将其视为受到以下约束:
[view(<=intrinsicWidth@contentHuggingPriority)]
[view(>=intrinsicWidth@compressionResistancePriority)]
这就是所有这些意思。当然,这同样适用于固有高度。
用作容器的普通UIView
没有固有大小。所以,它的内容拥抱和抗压优先级是没有意义的。
【讨论】:
很好的解释,肯。我还没有在任何地方看到过这样的解释,这完全有道理。是否有任何官方文件证实这一点? 现在我看到这就是official documentation 所说的。但现在我明白了。谢谢! 很高兴能帮上忙。您可能会发现conceptual guide 更有帮助,而不是参考课程参考。 @KenThomases 那么我们如何告诉UIView
取其内容高度的高度,尤其是当涉及到嵌套的UIView
s 时?这一定很简单,但我就是不明白:(以上是关于嵌套视图中的拥抱和抗压性的主要内容,如果未能解决你的问题,请参考以下文章