如何解决 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" 并且有效。
我在我的视图中添加了一个滚动视图,它悬停在状态栏上(我隐藏了它)。滚动视图工作正常,但是当我滚动到顶部时,我有一个白色的 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" 并且有效。