代码中的自动布局约束与XIB中的大小冲突

时间:2014-06-02 08:55:44

标签: ios autolayout xib

我在故事板中的3个子视图中设置了多个UILabelsUIButtons。在代码中,我已经为所有这些定义了自动布局约束,但是由于某种原因,当我运行应用程序时,我在故事板中定义的大小与代码中的约束相冲突。

例如,一个子视图位于XIB中的0,0,高度为200,宽度为320,只是为了在编写代码之前布局元素。故事板中没有约束。

此子视图中包含许多UILabel和UIButtons,它们的累积高度应该定义子视图的高度。这最终应该在205pts高度,但日志显示冲突:

2014-06-02 16:45:38.506 discounter[11691:60b] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
"<NSIBPrototypingLayoutConstraint:0x109390160 'IB auto generated at build time for view with fixed frame' V:[UIView:0x109389010(200)]>",
"<NSLayoutConstraint:0x109249510 V:[UIView:0x109389010(205)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x109249510 V:[UIView:0x109389010(205)]>

我已将所有观点设置为translatesAutoresizingMaskIntoConstraints = NO,因此我不知道为何会发生这种情况。它似乎也发生在许多其他元素上,但我感觉它可能也是同样的原因。

有人可以帮忙吗?

谢谢!

1 个答案:

答案 0 :(得分:10)

添加您将在故事板中的代码中替换的那些约束,并检查它们的“在构建时删除”属性。像这样:

remove at build time checkbox

<强>背景

这是一种让你向Xcode承诺你将在代码中添加约束的方法,从而防止Xcode自动生成必要的约束。自动生成是必要的,否则运行时将无法确定如何呈现所讨论的视图。通常,您应该努力在故事板中定义所有约束。您还可以对代码执行IBOutlet约束,然后在运行应用程序时编辑其常量值,这样可以避免在代码中添加繁琐的约束。