代码中的自动布局约束与 XIB 中的大小冲突
Posted
技术标签:
【中文标题】代码中的自动布局约束与 XIB 中的大小冲突【英文标题】:Auto layout constraints in code conflicting with sizes in XIB 【发布时间】:2014-06-02 08:55:44 【问题描述】:我在故事板的 3 个子视图中设置了多个 UILabels
和 UIButtons
。在代码中,我为所有这些定义了自动布局约束,但是由于某种原因,当我运行应用程序时,我在故事板中定义的大小与代码中的约束冲突。
例如,一个子视图位于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
,所以我不知道为什么会发生这种情况。它似乎也发生在许多其他元素上,但我感觉这可能是相同的原因。
谁能帮忙?
谢谢!
【问题讨论】:
看起来很像***.com/questions/23983427/… 【参考方案1】:在情节提要的代码中添加您将在代码中替换的那些约束,并检查它们的“在构建时删除”属性。像这样:
背景:
这是您向 Xcode 承诺您将在代码中添加约束的一种方式,从而防止 Xcode 自动生成必要的约束。自动生成是必要的,否则运行时将无法确定如何呈现相关视图。通常,您应该努力在情节提要中定义所有约束。您还可以 IBOutlet 为您的代码设置一个约束,然后在运行应用程序时编辑其常量值,这样可以避免在代码中添加繁琐的约束。
【讨论】:
感谢 Lukas,这已经解决了。这似乎是一种奇怪的方法 - 我想解决它的唯一方法是这种方法或完全用代码构建接口? 没问题!很高兴我能帮上忙。我不建议在代码中添加约束,因为 75% 的 UI 相关代码将是约束(去过那里,做过)。您可以通过在情节提要中使用约束来做很多事情,您只需要一些耐心来学习它就足够了。我已经更新了我的答案以提供一些背景信息。 当我第一次开始研究如何为更改设置动画时,我将所有约束都移到了代码中,但我想我会回到故事板并通过代码中的常量为小的更改设置动画并保留在情节提要中休息.. 最终我会做对的! 听起来像我的旅程。 :) 祝你好运! @staticnz 我推荐 PureLayout 用于基于代码的约束处理。当需要代码端约束操作时,它so 比处理 Apple 的废话要好得多,并且可以简洁直观地指定事物。不幸的是,您仍然需要按照 Lukas Kalinski 的回答处理 IB 自动生成的约束。以上是关于代码中的自动布局约束与 XIB 中的大小冲突的主要内容,如果未能解决你的问题,请参考以下文章
自动布局视图 xib - 没有可编辑的约束?我需要居中的元素
xib 中的自动布局 - 子视图的高度与导航栏和标签栏之间的空间成正比