在状态栏下没有导航栏的情况下扩展 UIViewController 的视图

Extend UIViewController's view without a navigation bar under status bar

我的视图没有导航栏,但我想在状态栏下显示内容。我已经检查了顶部栏下的延伸边缘,在我的视图控制器中的不透明栏下,我想在状态栏下显示的视图对顶部布局指南具有 0 垂直间距约束,但是,这仍然是我得到的:

状态栏有 20px 纯白背景,我不想要。我希望我的视图在状态栏下重叠,就像下面的模型一样:

我该怎么做,没有 可见的导航栏(我仍然有它,因为我的视图保证在导航控制器内,但它永远不会可见因为我有很多定制设计的部分,包括顶部栏)?

在调查了数十页数小时后,我找到了答案:

for (NSLayoutConstraint *constraint in self.view.constraints) {
    if((constraint.firstItem == self.topLayoutGuide && constraint.secondItem == self.view) ||
       (constraint.secondItem == self.topLayoutGuide && constraint.firstItem == self.view))         {
        constraint.constant = -20;
    }
}

对于任何想知道的人,我没有使用一个特定的答案,而是从这个问题派生的解决方案:iOS7 - View under status bar - edgesForExtendedLayout not working

在视图控制器或父视图控制器上,您必须将 automaticallyAdjustsScrollViewInsets 设置为 NO。之前的答案有点乱,因为框架提供了一个 属性 来控制这种行为。

如果您正在使用安全区域布局指南,您可以在 Interface Builder 中完全做到这一点。

使用 Top Space to Container Margin 约束而不是 Top Space to Safe Area 约束将状态栏下所需的视图固定到主视图。

然后在主视图的大小检查器上,取消选中安全区域相对边距。