如果太高,使用自动布局从水平中心调整垂直位置

Using Autolayout adjust vertical position from horizontal center if too high

在图表中,我需要将右视图与左视图居中对齐。如果右视图比左视图大,我需要将其顶部对齐。我可以用约束(故事板)来做到这一点,还是我需要在代码中做一些事情来在确定大小后调整右视图的位置(通过约束)?右视图有多个可以增长的 UILabel,所以我直到运行时才知道大小。容器实际上是一个UITableViewCell。

居中很容易。右视图调整大小,单元格调整到该大小。问题是如果它太大,需要顶部对齐。

  1. 在故事板中,将右视图与左视图顶部对齐。

  2. 给出值

    topAlignCons.value= +(leftView.height/2)  //in storyboard  
    

    以便它与左视图的中心对齐

  3. 在视图控制器中为顶部对齐约束创建出口。

  4. 当右视图大于左视图时,将出口约束值更改为0。

     topAlignConstraint.constant=@0;
    

    现在它将与左视图顶部对齐,没有负值。

你想要这个:

你可以用两个约束来做到这一点。

您希望绿色视图的顶部大于或等于粉红色视图的顶部,总是。也就是说,您需要 green.top ≥ pink.top.

此外,您希望绿色视图的 Y 中心等于粉红色视图的 Y 中心,如果可能。也就是说,您更喜欢 green.centerY == pink.centerY,如果它不违反其他约束。

这是故事板编辑器中的第一个约束:

这是第二个约束:

请注意,我已将第二个约束的优先级降低到 800,这意味着它不是必需的,但它是强烈推荐的。

您无需编写任何代码即可完成这项工作。我确实在我的演示中编写了代码来连接滑块和标签,但我不必从代码中修改这两个约束。