自动布局:Y 位置作为两个值的最大值

Auto Layout: Y Position as the Max of Two Values

我有一个按钮 playButton 和两个 UIView,myView1 和 myView2,它们的位置在执行过程中可能会发生变化。

我希望 playButton 的顶部比 UIView1 的底部或 UIView2 的底部低 10 个单位,取较大值(再往下)。

我如何在代码中使用自动布局来表达这一点?我尝试将一个约束设置为大于或等于,但似乎没有任何效果。

这里有一种思考方式:创建一个约束,即 playButton 的顶部大于或等于 myView1 的底部加 10,另一个约束是 playButton 的顶部大于或等于 myView1 的底部myView2 加 10,然后是第三个约束,即 playButton 的顶部以低优先级位于共享父视图的顶部。

这两个不等式将确保按钮位于两个视图下方。然而,这留下了歧义。该按钮可以位于两者下方的 任意位置。第三个约束不能这样满足,但自动布局系统会尝试尽可能接近。这解决了歧义。该按钮将尽可能靠近顶部,同时仍位于两个视图下方。

这个其实可以简化的。您可以将其中一种不等式与低优先级等式结合起来。有一个约束,即 playButton 的顶部大于或等于 myView1 的底部加 10。第二个约束是 playButton 的顶部 等于 myView2 的底部加 10,但优先级较低。

如果 myView1 的底部低于 myView2 的底部,则第一个约束要求 playButton 低于它。第二个约束无法满足,但系统会尝试尽可能靠近 myView2 的底部。这使按钮尽可能高,同时仍低于 myView1 的底部。如果 myView2 的底部低于 myView1 的底部,则第二个约束直接确定按钮的位置。第一个约束也被满足,因为它是一个不等式。

KenThomases 回答的插图:

view1-> 蓝色

视图 2-> 红色

视图 3-> 粉色

视图 1 和视图 3 之间的约束:大于或等于 20,优先级为 1000。

视图 2 和视图 3 之间的约束:等于 20,优先级为 999。

Ken 在他的回答中解释了工作原理。随便看看。

如果视图 1 大于视图 2

如果视图 2 大于视图 1