【问题标题】:Autolayout height equal to MAX(multiple view heights)自动布局高度等于 MAX(多个视图高度)
【发布时间】:2013-06-11 15:39:43
【问题描述】:

假设我有一个名为container 的视图。 container 包含 5 个 UIButtons。我想在container上添加一个高度NSLayoutConstraint,这个高度应该等于其子视图中最高按钮的NSLayoutHeightAttribute

我没有看到一个简单的方法来做到这一点。有人有什么想法吗?

【问题讨论】:

    标签: ios cocoa-touch autolayout


    【解决方案1】:

    您需要为每个子视图(按钮)设置一个约束,指定容器的高度应大于或等于子视图的高度。给这个约束一个高优先级,比如UILayoutPriorityRequired(无论如何都是默认的)。

    然后在容器的高度上再添加一个约束,指定它的高度应该等于 0。给这个约束一个低优先级,比如UILayoutPriorityLow。由于自动布局试图最小化未满足约束的错误,它将使容器尽可能短,同时仍然满足所有更高优先级的约束。

    我在this gist 中放了一个例子。它产生这个结果:

    蓝色视图具有固定的高度。棕褐色视图是蓝色视图的超级视图,它的高度如上所述受到限制。我将每个子视图的底部固定到容器的底部,但您可以固定顶部或 Y 中心。

    【讨论】:

    • 太棒了,这行得通。虽然我有点困惑。我们可以在容器上添加多个高度限制吗?如果我说容器的高度应该大于等于subview1,还有subview2,为什么这两者不冲突?另外,我不明白您在最后一个低优先级约束背后的推理。我试过没有它,这也有效。这是一项安全措施吗?
    • 如果有满足两个约束的布局,则约束不会冲突。事实上,冲突约束的定义是不能同时满足它们。假设您的子视图的高度为 60、80 和 100。那么 any 容器高度为 100 或更高可以满足子视图高度和容器高度之间的约束,因此这些约束不会与每个其他。
    • 由于任何容器高度至少为 100 将满足我刚刚描述的子视图的约束,这些约束本身是模棱两可的:有多种令人满意的解决方案。自动布局不会抱怨歧义,并且可能会给您想要的布局。但是对您的应用程序或 iOS 的一些更改可能会使自动布局提供您将来不想要的布局。额外的、低优先级的约束可以保护您免受这种情况的影响。
    猜你喜欢
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 2019-05-18
    • 2023-03-05
    相关资源
    最近更新 更多