Autolayout:向 superview 添加约束而不是 Top Layout Guide?

Autolayout: Add constraint to superview and not Top Layout Guide?

我的故事板中的 UIViewController 中有一个 UIView,我想在 space 上添加一个约束,以查看距离顶部边缘的距离。

现在,当我像往常一样按 ctrl 并拖动到 ViewController 的主视图时,我只能选择将其设置为顶部布局指南。

这对我来说是个问题,因为在应用程序的某一时刻,我打算将主视图向上移动 20-50 像素左右,然后发生的事情是我所拥有的视图不会移动...因为它没有对齐超级视图。

我如何在情节提要中手动执行此操作,还是必须以编程方式添加?

我正在使用 xcode 6.

您应该可以通过在故事板中突出显示您想要的视图然后在顶部菜单中选择 Editor > Pin > Top Space to Superview 来完成。


This is outdated in XCode 7, see @PaulGurov's answer instead.

丹的回答有效。我只是想说明,如果您在 storyBoard 中将视图设置为 y < 20,并通过固定面板配置约束,它将设置为超级视图:

约束常量值右边有一个箭头。如果你点击它,会弹出一个菜单,你可以在其中选择你想要的约束相对于什么。如果您选择 'View',它会将其固定到视图顶部。

我已经有了一大堆约束,我只是想改变它们而不是打破它们。事实证明,如果您双击要编辑的约束,然后单击具有“.Margin”的项目,您可以通过选择该项目来关闭 "Relative to Margin"。

TL;DR:您可以通过按键盘上的 Alt 键来限制边距。


还可以补充一点,如果您尝试固定的视图不是您要固定到的视图的直接子视图,则建议的方法实际上无效。假设视图层次结构看起来像这样,并且您想将图像视图(在本例中为Parallax Image View)固定到视图控制器的视图(在本例中为View)。

要做到这一点,您只需 Control + DragParallax Image ViewView。这会显示默认选项,您可以在其中看到 Vertical Spacing to Top Layout Guide 以将 Parallax Image View 固定到顶部布局指南。

您想要的是将其固定到视图的顶部(边缘)。为此,您必须通过按 Alt

切换到另一组约束

如果不小心将视图的高度设置为 0,将不会显示垂直 Space 到顶部布局指南。然而,垂直 Space 到底部的布局指南将出现,这对大约 2004 年的 Apple 内部人员来说一定是有意义的。

None 上面的答案对我有用,相反,我必须做一些 hack 来设置我的子视图的顶部和超级视图的顶部而不是顶部布局指南。

  • 首先用superview设置subview居中垂直
  • 然后,将子视图和父视图的 Center Y 约束更改为 Top 约束。

你现在可以走了。