帮助我理解:
当您在界面构建器中放置任何视图时,Xcode不会抱怨缺少约束或模糊规则。只有在设置了一些约束(但并非所有约束都消除了歧义)之后, Xcode会通知您缺少约束并建议一些约束。
例如:我为视图设置了一个约束,它在superview中水平居中。现在Xcode抱怨Y位置缺少规则。 为什么它只是从当前的X-Postition中推断出,当你没有任何约束时呢?
答案 0 :(得分:1)
在您开始使用约束之前,Xcode不知道将在该视图上使用约束,因此它不会显示任何错误。但是一旦添加了约束,它就知道开始应用autoLayout
。 Xcode现在需要知道约束中特定视图的宽度,高度,x和y位置。它可以根据应用于其他视图的约束来推断它们,也可以显式定义它们。
此外,您可以使用允许Xcode应用其认为应存在的约束的选项。但它们并不总是你想要的。请看下面的图片。 (添加缺少约束按钮)
在您的示例中,您应用了一个约束,指定它应该在X轴方面而不是Y轴方面。要在这种情况下推断约束,您需要有其他视图应用约束,并且此视图应该具有其他约束,这些约束允许它推断其位置。在您的情况下,这发生在X轴和Y轴之间没有关系。只需指定X坐标就不能让autoLayout找出Y坐标。
此外,对于UIView
,即使您将其水平和垂直居中,即使这样,它也会显示错误,告诉您定义宽度和高度,前提是它们在视图中没有内容
答案 1 :(得分:1)
那是因为在向视图添加约束之前,Xcode会将其视为您希望视图位于精确的X,Y位置。这意味着无论容器的大小是多少,视图都将始终处于精确的坐标并具有相同的大小。
但是,在添加一些约束之后,这意味着您希望视图根据容器大小(autolayout
的用途)更改其大小或位置,因此您添加的约束必须提供足够的Xcode确定其框架的信息。
例如,如果仅添加Horizontally in Container
约束而未指定其大小或Y坐标,则Xcode无法分辨您希望放置视图的位置。这就是你收到警告的原因。
至于你提到的例子,如果你将视图设置为在容器中水平居中,随着容器的宽度变大,Xcode无法分辨你喜欢哪一个: