Ios 在两个对象之间居中和对象的约束

Ios 在两个对象之间居中和对象的约束,ios,autolayout,storyboard,uistackview,uilayoutguide,Ios,Autolayout,Storyboard,Uistackview,Uilayoutguide,我的设计要求按钮位于其他两个对象之间的中心。其中一个对象位于视图的垂直中心(绿色)。另一个对象与底部边缘有一定距离(绿色)。现在的任务是将第三个对象(红色)居中于其他两个对象之间。我正在使用xcode6的新约束,并且我的视图处于wRegular hRegular模式。这对代码来说很容易,但我正在尝试使用故事板来实现这一点 有许多方法: 在iOS 9中,最简单的方法是定义一个垂直UIStackedView,其中分布为“等间距”,然后addArrangedSubview三个圆形子视图 iOS 9中

我的设计要求按钮位于其他两个对象之间的中心。其中一个对象位于视图的垂直中心(绿色)。另一个对象与底部边缘有一定距离(绿色)。现在的任务是将第三个对象(红色)居中于其他两个对象之间。我正在使用xcode6的新约束,并且我的视图处于wRegular hRegular模式。这对代码来说很容易,但我正在尝试使用故事板来实现这一点


有许多方法:

  • 在iOS 9中,最简单的方法是定义一个垂直
    UIStackedView
    ,其中
    分布为“等间距”,然后
    addArrangedSubview
    三个圆形子视图

  • iOS 9中的另一个选项是创建两个
    UILayoutGuide
    (表示图像中的两个问号),使用
    addLayoutGuide
    将它们添加到共享superview中,并将它们定义为彼此相同的大小。相应的VFL可能如下所示:

    "V:|[greenView1(==100)]-[layoutGuide1]-[redView(==50)]-[layoutGuide2(==layoutGuide1)]-[greenView2(==greenView1)]|"
    
  • 在早期的iOS版本中,您不必使用
    UILayoutGuide
    ,只需创建两个背景清晰的“空间”视图(
    UIView
    ),然后定义一个约束,使其高度相同,然后在五个视图之间定义垂直间距约束(三个圆和两个间隔视图)常数为零

    它可能看起来像:

    "V:|[greenView1(==100)]-[layoutGuide1]-[redView(==50)]-[layoutGuide2(==layoutGuide1)]-[greenView2(==greenView1)]|"
    

    为了说明这一点,我已经将这些“间隔”视图设置为可见的,但显然您已经将它们设置为透明的,这样您就无法在UI中看到它们

    这在逻辑上等同于iOS 9中的
    UILayoutGuide
    方法,不同的是
    UIView
    “间隔”视图的开销比
    UILayoutGuide
    稍大。但在9之前的iOS版本中,这是解决此问题的常见方法


    • 我想出了最简单的方法

      只需遵循以下步骤:

    • 在两个圆之间添加视图
    • 添加它的尾随和前导空格。(在我的例子中,零到superview)
    • 从圆中添加顶部和底部空间
    • 现在将您的红色圆圈放在最近添加的视图中
    • 从“装配”菜单使其水平和垂直居中

    • 你可以用一个垫片来完成。将垫片顶部固定到上部绿色圆圈的底部。将垫片底部固定到下部绿色圆圈的顶部。将红色圆圈的垂直中心固定到垫片的垂直中心。同意。有很多种给猫剥皮的方法。我使用单独的垫片,这样它可以处理更多的t韩寒没有处理乘法器的三个圆(尽管你现在也可以这样做)。这两个解决方案都很棒!我喜欢第一个解决方案中的红色按钮不需要是间隔视图的子项。谢谢。仅供参考,为了未来读者的利益,我更新了我的答案,以反映iOS 9中可用的两种新方法,即
      UIStackedView
      UILayoutGuide
      。请检查iOS 9