您何时需要为标签和按钮添加内容以防止它们占用文本字段的空间?
Posted
技术标签:
【中文标题】您何时需要为标签和按钮添加内容以防止它们占用文本字段的空间?【英文标题】:When do you need content hugging for labels and buttons to prevent them from taking the space of a text field? 【发布时间】:2015-05-26 00:15:13 【问题描述】:我对以编程方式创建的简单布局感到困惑,其中您使用约束连续有一个UILabel
、一个UITextField
和一个UIButton
。希望您能帮助我理解以下行为。
如果我使用visual format language 来布置这样的视图...
|-[label]-[field]-[button]-|
...我看到标签想占用尽可能多的空间,像这样:
[ label ] [field] [button]
但如果我从等式中删除标签...
|-[field]-[button]-|
...那么是按钮想要接管空间:
[field] [ button ]
通过为标签和按钮设置“高拥抱优先级”,我可以控制它们的大小(我猜它们会保持其固有大小)。但我不知道为什么这些情况下的行为会有所不同。
你知道自动布局在这里是如何工作的吗?
相关问题:
Using Auto Layout to have UILabel and UITextField next to each other
【问题讨论】:
VFL 在 Interface Builder 提供的自动布局中不提供警告。尝试在故事板或 xib 中重建您的情况,以找出您出错的地方。这样可以更好地了解问题。 谢谢,确实如此,VFL 不给出警告,编码约束中的冲突有点难以阅读。 【参考方案1】:当标签和按钮的content-hugging优先级相等时,其中一个需要被拉伸以满足其他约束,那么拉伸哪个是任意的。一般来说,当约束有多种解决方案且优先级不区分它们时,就会产生歧义,自动布局系统可以解决任何可能的解决方案中的约束。它可以从运行更改为运行。它甚至可以在每次布局传递完成时发生变化,这意味着视图可以在用户与它们交互时跳来跳去。
在一种情况下标签被拉伸而在另一种情况下按钮只是随机的事实。
当您有类似|-[label]-[field]-[button]-|
的东西时,容器的宽度可能并不总是等于三个视图的固有宽度和它们之间的间距之和(因此可能需要拉伸某些东西) ,您应该始终通过将其内容拥抱优先级设为最低来指定要拉伸的内容。
【讨论】:
谢谢肯。你知道默认的拥抱优先级是什么吗?低(250)? “一半”(500)?取决于每种视图类型(标签、字段、按钮)?根据我的测试,我认为它是UILayoutPriorityDefaultLow
(250),所以我应该最多将UILayoutPriorityDefaultLow - 1
设置为该字段,以便它推动其他视图。
这取决于视图及其内容和配置。与其假设或依赖默认值,不如根据需要进行设置。以上是关于您何时需要为标签和按钮添加内容以防止它们占用文本字段的空间?的主要内容,如果未能解决你的问题,请参考以下文章