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 - 等高乘数约束导致冲突约束的主要内容,如果未能解决你的问题,请参考以下文章
iOS 以编程方式生成的视图具有隐藏的约束,导致与自动布局发生冲突
将 UITableView 约束到其父视图的边缘会导致布局冲突