如何将约束添加到根视图而不是 TopLayoutGuide?

Posted

技术标签:

【中文标题】如何将约束添加到根视图而不是 TopLayoutGuide?【英文标题】:How can I add a contraint to the root view instead of TopLayoutGuide? 【发布时间】:2017-06-05 05:52:11 【问题描述】:

我的ViewController 嵌入在UINavigationController 中,它有一个view,应该与根视图的顶部对齐。根视图具有深灰色背景,并占据全屏。但这就是现在的样子:

如您所见,根视图显示在状态栏下方,这是意料之中的。但是子视图(黑色)显示在白色条带下方。我猜这是顶部布局指南,我的子视图有一个约束,其顶部等于顶部布局指南的底部。删除此约束后,我无法通过 Ctrl 拖动将约束从子视图添加到根视图,Xcode 始终使用顶部布局指南设置约束。

我的问题是:

    如何添加约束top of subview == top of root view? 为什么顶部布局指南占据了白色区域?

【问题讨论】:

【参考方案1】:
self.automaticallyAdjustsScrollViewInsets = true

此属性的默认值为 true,它让容器视图控制器知道他们应该调整此视图控制器视图的滚动视图插图,以考虑状态栏、搜索栏、导航栏、工具栏所占用的屏幕区域,或标签栏。如果您的视图控制器实现管理自己的滚动视图插入调整,请将此属性设置为 false。

你也可以从Interface Builder设置这个属性

【讨论】:

花了我几个小时...但是如果只计算状态栏,为什么白色条纹,子视图(滚动视图)应该在状态栏下方,对吧? 好吧,它取决于滚动视图约束或框架 同时检查 edgesForExtendedLayout @NeoWang

以上是关于如何将约束添加到根视图而不是 TopLayoutGuide?的主要内容,如果未能解决你的问题,请参考以下文章

如何将间距约束指定为超级视图大小的比例?

锚约束缩小超视图而不是放大子视图

自动布局问题

如何在基本样式表视图单元格中添加约束

浮动在 UIView 而不是 Paging 上的水平滚动视图

如何使用 AutoLayout 根据父高度调整子视图高度而不添加/删除约束