iOS - Autolayout - 如何在导航栏上添加约束?

8
我刚开始将我的应用移植到自动布局。 我想给一个标签设置约束,使其在导航栏下方'0'像素。 我尝试了但没有找到解决方法。 这里是屏幕截图。
在故事板中,我从父视图中设置了约束。
在 iOS7 中它工作得很好。
但在 iOS6 中,它会在导航栏下面64个像素,因为父视图从导航栏下面开始。
如果我可以为标签添加导航栏下方的顶部约束,就可以解决问题。但我找不到如何实现。我查看了一些问题,但没有得到答案。
请帮忙。
2个回答

10

iOS 11更新:

iOS 11引入了安全区域的概念,将所有内容容器放在可见区域的负担再次转移到视图手中,而不是由视图和控制器共同完成。

请参阅Apple的文档此处

当使用storyboards或XIBs时,在Xcode中启用此功能非常简单。这是向后兼容的,应该可以按预期在iOS 10及以下系统上使用。在代码中,您将使用if (@available(iOS 11.0, *))来决定是设置约束与安全区域指南/锚定还是在旧系统上使用传统指南。


使用storyboards时,需要添加一个约束到顶部布局指南。这会解决您的问题,在iOS6上为0pt,在iOS7上为动态值。如果您正在使用nib/xib文件,则需要在代码中添加约束。实现这一目标最简单的方法是创建一个垂直距离为0的约束,为此约束创建一个代码中的输出口,在viewDidLayoutSubviews中更新约束输出口的constant值为self.topLayoutGuide.length


1
这是一个非常实用的工具,可以加入到工具箱中,而且在将近三年后仍然有效。非常感谢。 - simioliolio

0

你只需要在你的约束条件中进行一些修改:

1)给你的标签一个高度约束

2)将你的标签固定到前导视图 - 水平空间约束

3)添加一个垂直空间约束

第三步需要小心操作[我会附上一张图片供您参考。]

Adding Vertical Space Constraint

在这样做之后,检查您的视图控制器上是否仍然存在红色箭头标记


不正确。如果他添加了0个垂直空间,标签将会出现在导航栏下面。 - Léo Natan
实际上,这是由XCode自己在点击红色箭头时建议的。而且对我来说,约束似乎运行良好。在7.0和6上都进行了检查。 - user1638945
只有在禁用扩展边缘和半透明栏的情况下,0 才能正常工作。 - Léo Natan
1
啊,我明白了,你正在使用Storyboard。在这种情况下,0不是与视图顶部一起创建的,而是与顶部布局指南一起创建的。 - Léo Natan
为什么需要添加固定高度?完全没有必要。 - lensovet
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接