【问题标题】:Xcode7 - equal heights multiplier constraint causing conflicting constraintsXcode7 - 等高乘数约束导致冲突约束
【发布时间】: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,但我不确定它是否有效,因为我无法删除错误消息中显示的一些约束。

【问题讨论】:

    标签: ios swift constraints xcode7


    【解决方案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 所做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 2020-09-20
    相关资源
    最近更新 更多