自动布局:Y 位置作为两个值的最大值
Posted
技术标签:
【中文标题】自动布局:Y 位置作为两个值的最大值【英文标题】:Auto Layout: Y Position as the Max of Two Values 【发布时间】:2015-01-11 21:58:35 【问题描述】:我有一个按钮 playButton 和两个 UIView,myView1 和 myView2,它们的位置在执行过程中可能会发生变化。
我希望 playButton 的顶部比 UIView1 的底部或 UIView2 的底部低 10 个单位,以较大的值为准(进一步向下)。
如何在代码中使用自动布局来表达这一点?我尝试将一个约束设置为大于或等于,但它似乎没有效果。
【问题讨论】:
一个约束设置按钮顶部到view1底部的距离大于10,另一个约束设置按钮顶部到view2底部的距离为大于 10? 我试过了,但收到了关于歧义的警告。 Ken Thomases 的回答对此有解决方案。谢谢。 对,我只是在处理第三个约束。 :) 【参考方案1】:这里有一个思路:创建一个playButton顶部大于等于myView1底部加10的约束,另一个约束playButton顶部大于等于myView2底部加10,然后是第三个约束,即 playButton 的顶部处于低优先级的共享父视图的顶部。
这两个不等式将确保按钮位于两个视图下方。然而,这留下了歧义。该按钮可以在两者下方的任何地方。第三个约束不能这样满足,但自动布局系统会尽量靠近。这解决了歧义。该按钮将尽可能靠近顶部,同时仍位于两个视图下方。
这实际上可以简化。您可以将其中一种不等式与低优先级的等式结合起来。有一个约束,即 playButton 的顶部大于或等于 myView1 的底部加 10。有第二个约束,即 playButton 的顶部等于 myView2 的底部加 10,但在优先级较低。
如果 myView1 的底部低于 myView2,则第一个约束要求 playButton 低于它。不能满足第二个约束,但系统会尽量靠近 myView2 的底部。这使按钮保持在尽可能高的位置,同时仍低于 myView1 的底部。如果 myView2 的底部低于 myView1 的底部,则第二个约束直接确定按钮的位置。第一个约束也得到满足,因为它是一个不等式。
【讨论】:
简单但很好的答案。 !! 这种“系统试图尽可能接近”的行为是否记录在任何地方? @algrid 你可以在这里找到它link 当它说 “如果约束 a == b 是可选的,基于约束的布局系统将尝试最小化 abs(a-b)” @lucianoenrico 谢谢!【参考方案2】:KenThomases 答案图解:
view1-> 蓝色
查看 2-> 红色
查看 3-> 粉红色
view1 和 view 3 之间的约束:大于或等于 20,优先级为 1000。
view2 和 view 3 之间的约束:等于 20,优先级为 999。
Ken 在他的回答中解释了这项工作。看看吧。
如果视图 1 大于视图 2
如果视图 2 大于视图 1
【讨论】:
以上是关于自动布局:Y 位置作为两个值的最大值的主要内容,如果未能解决你的问题,请参考以下文章