什么时候需要标签和按钮的内容拥抱以防止它们占用文本字段的 space?

When do you need content hugging for labels and buttons to prevent them from taking the space of a text field?

我对以编程方式创建的简单布局感到困惑,其中使用约束将 UILabelUITextFieldUIButton 排成一行。我希望你能帮助我理解以下行为。

如果我使用 visual format language 来布置这些视图...

|-[label]-[field]-[button]-|

...我看到标签想尽可能多地取space,像这样:

[   label  ] [field] [button]

但是如果我从等式中删除标签...

|-[field]-[button]-|

...那么就是按钮想要接管space:

[field] [       button      ]

通过为标签和按钮设置 "high hugging priority",我可以控制它们的大小(我想它们会保持其固有大小)。但我不知道为什么在这些情况下行为会有所不同。

你知道自动布局在这里是如何工作的吗?

相关问题:

Using Auto Layout to have UILabel and UITextField next to each other

当label和button的content-hugging priorities相等时,需要拉伸其中一个以满足其他约束,那么拉伸哪个是任意的。通常,当约束有多个解决方案且优先级不区分它们时,就会出现歧义,自动布局系统可以在任何可能的解决方案中解决约束。它可以从 运行 运行 变化。它甚至可以在每次布局传递完成时更改,这意味着视图可以在用户与它们交互时跳来跳去。

在一种情况下标签被拉伸而在另一种情况下按钮是随机的。

当你有类似 |-[label]-[field]-[button]-| 的东西时,容器的宽度有可能并不总是等于三个视图的固有宽度和它们之间的间距的总和(因此可能需要被拉伸),你应该总是通过将其内容拥抱优先级设置为最低来指定一个被拉伸。