0

我对以编程方式创建的简单布局感到困惑,其中您使用约束连续有 a UILabel、 aUITextField和 a UIButton。我希望你能帮助我理解以下行为。

如果我使用视觉格式语言来布置这样的视图......

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

...我看到标签希望尽可能多地占用空间,如下所示:

[   label  ] [field] [button]

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

|-[field]-[button]-|

...然后是想要接管空间的按钮:

[field] [       button      ]

通过为标签和按钮设置“高拥抱优先级”,我可以控制它们的大小(我猜它们保持固有大小)。但我不知道为什么这些情况下的行为差异。

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

相关问题:

使用自动布局使 UILabel 和 UITextField 彼此相邻

4

1 回答 1

1

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

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

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

于 2015-05-26T01:24:36.767 回答