如何解决 Xcode 中 ScrollView 后面的状态栏 space?

How to fix why status bar space behind ScrollView in Xcode?

我在我的视图中添加了一个滚动视图,它悬停在状态栏上(我隐藏了它)。滚动视图工作正常,但是当我滚动到顶部时,我有一个白色的 space,当我点击屏幕时它会消失,当我向下滚动然后向上滚动时再次出现。

我注意到滚动条没有移动到视图的顶部,而是停在状态栏上。

以下是显示我的意思的屏幕截图。

这里我在视图的顶部,但滚动条不是:

这是相同的视图,当我再次滚动到顶部时出现白色状态栏:

当我点击屏幕或向下滚动时它会消失。

这是我的约束条件:

我认为是版面边距之类的问题,但我不知道我应该改变什么?

我在我的视图控制器中隐藏状态栏:

override func viewWillAppear(_ animated: Bool) {
    UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelStatusBar

    super.viewWillAppear(animated)
}

编辑: 即使我评论了隐藏状态栏的那一行,我的滚动视图仍然有同样的问题。所以问题不在于我如何隐藏它。

虽然与您的问题无关,但我必须对您隐藏状态栏的方式做出反应 - 正确的方法是在您的视图控制器中覆盖 prefersStatusBarHidden 并在您的 viewWillAppear:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    self.setNeedsStatusBarAppearanceUpdate()
}

override var prefersStatusBarHidden: Bool {
    return true
}

更新

由于您的视图控制器位于 UINavigationViewController 内,您需要覆盖 UINavigationViewController 中的 childViewControllerForStatusBarHidden 以使用 visibleViewController 作为控制器来确定隐藏的状态栏(我为 childViewControllerForStatusBarStyle 添加了覆盖以保持一致性):

extension UINavigationController {
    open override var childViewControllerForStatusBarStyle: UIViewController? {
        return visibleViewController
    }

    open override var childViewControllerForStatusBarHidden: UIViewController? {
        return visibleViewController
    }
}

正如 Sam 所说,我将滚动视图上的 content insets 更改为 "Never" 并且有效。