Xcode7 - 等高乘数约束导致冲突约束

Posted

技术标签:

【中文标题】Xcode7 - 等高乘数约束导致冲突约束【英文标题】:Xcode7 - equal heights multiplier constraint causing conflicting constraints 【发布时间】:2015-11-26 18:33:08 【问题描述】:

我正在尝试与 Xcode7 中的 the OP of this question 几乎相同的事情。

我的最终目标是拥有一个带有两个子视图的垂直StackView:一个占据父级高度的 70%,另一个占据剩余的 30%。

我按照我链接的帖子中的说明进行操作。我选择了子视图(GMSMapView)和父视图StackView,并选中了Pin 约束菜单中的equal heights 框。这工作得很好,花花公子。但是,当我从GMSMapView 的大小检查器编辑该约束并将乘数更改为.7 时,突然出现conflicting constraints 错误!

这是我现在正在处理的场景的图片:

这是错误的图片:

有谁知道如何解决这些冲突?我尝试关闭Autoresize Subviews,但我不确定它是否有效,因为我无法删除错误消息中显示的一些约束。

【问题讨论】:

【参考方案1】:

UIStackView 的高度取决于其子视图的大小(除非您使用 UIStackViewDistributionFillEqually)。

前两个冲突的约束评估为 this

Stack View.height = View.height
Map View.height = 0.7 x Stack View.height

但由于UIStackView 的高度基于其子视图,因此本质上存在第三个约束。

Stack View.height = Map View.height

所有这些约束不能同时存在,因为它们相互冲突。


我能想到两种选择。

删除UIStackView。由于它只包含一个视图,因此您不会从使用它中获得任何好处,而且只会使事情复杂化。

如果这不是一个选项,您将需要删除一些约束,以免将 UIStackView 约束到特定高度。

【讨论】:

我想添加第三个选项(这实际上解决了我的问题):添加StackView 的第二个孩子并将其设置为填充剩余的.3 x Stack View.height。您的声明But since the UIStackView bases its height on its subviews, there is essentially a third constraint 向我暗示了解决方案是简单地填充StackView 的整个高度以使冲突的约束一致。因为这是我一开始的计划,所以一切顺利。 我仍然认为删除 UIStackView 是一个更好的解决方案,因为它所做的只不过是 UIView 所做的。

以上是关于Xcode7 - 等高乘数约束导致冲突约束的主要内容,如果未能解决你的问题,请参考以下文章

SnapKit 更新约束导致冲突

以编程方式设置约束导致 Swift 中的冲突

iOS 以编程方式生成的视图具有隐藏的约束,导致与自动布局发生冲突

将 UITableView 约束到其父视图的边缘会导致布局冲突

ALTER TABLE 语句与 FOREIGN KEY 约束冲突

Hibernate JPA双向一对多结果与约束冲突异常