【问题标题】:Constraints to center and object between two objects约束两个对象之间的中心和对象
【发布时间】:2014-11-11 21:45:51
【问题描述】:

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

【问题讨论】:

标签: ios autolayout storyboard uistackview uilayoutguide


【解决方案1】:

有多种方法:

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

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

    "V:|[greenView1(==100)]-[layoutGuide1]-[redView(==50)]-[layoutGuide2(==layoutGuide1)]-[greenView2(==greenView1)]|"
    
  • 在早期的 iO​​S 版本中,您可以创建两个“空间”视图(UIView 具有清晰的背景,因此它们不可见),而不是使用 UILayoutGuide,然后定义一个约束,使它们的高度相同,并且然后定义五个视图(三个圆圈和两个间隔视图)之间的垂直间距约束,常数为零。

    它可能看起来像:

    我已经让那些“间隔”视图可见,以说明这个想法,但显然你会将它们设置为透明,这样你就无法在 UI 中看到它们。

    这在逻辑上等同于 iOS 9 中的 UILayoutGuide 方法,只是 UIView “spacer” 视图的开销比 UILayoutGuide 多一点。但在 iOS 9 之前的版本中,这是解决此问题的常用方法。

【讨论】:

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

我想出了最简单的方法。

只需按照以下步骤操作:

  1. 在两个圆圈之间添加一个视图
  2. 添加其尾随和前导空格。 (在我的情况下,从零到 superview)
  3. 从圆圈中添加顶部和底部空间。
  4. 现在将红色圆圈放在最近添加的视图中
  5. 从对齐菜单使其水平和垂直居中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多