Cocoa 是否可以使一个或多个布局约束以另一个约束被破坏为条件?(处理重叠视图)

Cocoa 是否可以使一个或多个布局约束以另一个约束被破坏为条件?(处理重叠视图),cocoa,autolayout,Cocoa,Autolayout,我有许多垂直排列的(动态)视图。在本例中,假设它们与superview的中心对齐,基于它们与上边缘的距离,如下所示: 现在,这两个视图可能垂直重叠: 当视图重叠时,我希望在水平面上移动它们,使它们不再重叠 这可以通过检查每个布局后是否有重叠来实现,如果有,则动态添加约束,但我想知道是否有一种方法可以做到这一点,它可以设置一次,然后在视图重叠时自动发生 例如,手动执行此操作的一种方法是添加如下所示的约束: 换句话说,我可以添加三个附加约束: 一个是棕色,固定了视图之间的最小水平距离 第二

我有许多垂直排列的(动态)视图。在本例中,假设它们与superview的中心对齐,基于它们与上边缘的距离,如下所示:

现在,这两个视图可能垂直重叠:

当视图重叠时,我希望在水平面上移动它们,使它们不再重叠

这可以通过检查每个布局后是否有重叠来实现,如果有,则动态添加约束,但我想知道是否有一种方法可以做到这一点,它可以设置一次,然后在视图重叠时自动发生


例如,手动执行此操作的一种方法是添加如下所示的约束:

换句话说,我可以添加三个附加约束:

  • 一个是棕色,固定了视图之间的最小水平距离
  • 第二个是黄色,表示视图与其superview的中心X之间的间距必须相等
(这个特定的解决方案不能很好地扩展到两个以上的视图,但我对这里的概念验证最感兴趣。)


以上面简单的两视图示例为例,是否有任何方法可以一次性添加我建议的水平约束(或者,实际上,任何其他约束集),并在视图重叠时使其生效

换句话说,在某种意义上,我想让它们有条件,在俯视图的下边缘和俯视图的上边缘之间的垂直距离是负的


tl;博士

能否使一个布局约束以另一个约束为条件(该约束的值或该约束被破坏)?