如何修复Xcode中ScrollView背后的状态栏空间?

时间:2018-02-04 14:13:18

标签: ios swift swift3 uiscrollview uistoryboard

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

我注意到滚动条不会显示在我的视图顶部,而是停在状态栏上。

以下是截图,向您展示我的意思。

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

以下是我再次滚动顶部时出现的白色状态栏的相同视图:

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

以下是我的约束:

constraints

我认为这是布局保证金的问题或类似的问题,但我不知道应该改变什么?

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

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

    super.viewWillAppear(animated)
}

编辑:即使我评论隐藏状态栏的行,我的滚动视图仍然存在同样的问题。所以问题不在于我隐藏它的方式。

2 个答案:

答案 0 :(得分:1)

正如Sam所说,我将content insets更改为"从不"在滚动视图上它可以工作。

答案 1 :(得分:0)

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

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

    self.setNeedsStatusBarAppearanceUpdate()
}

override var prefersStatusBarHidden: Bool {
    return true
}

<强>更新

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

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

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