如何修复为啥在 Xcode 中 ScrollView 后面有状态栏空间?
Posted
技术标签:
【中文标题】如何修复为啥在 Xcode 中 ScrollView 后面有状态栏空间?【英文标题】:How to fix why status bar space behind ScrollView in Xcode?如何修复为什么在 Xcode 中 ScrollView 后面有状态栏空间? 【发布时间】:2018-07-14 12:07:23 【问题描述】:我在我的视图中添加了一个滚动视图,它悬停在状态栏上(我把它隐藏了)。滚动视图工作正常,但是当我滚动到顶部时,我有一个空白区域,当我点击屏幕时它会消失,当我向下滚动然后顶部时会再次出现。
我注意到滚动条没有到我的视图顶部,而是停在状态栏。
这里有一些截图可以告诉你我的意思。
我在视图顶部,但滚动条不在:
这是与再次滚动顶部时出现的白色状态栏相同的视图:
当我点击屏幕或向下滚动时它会消失。
这是我的限制:
我认为是 Layout Margin 或类似的问题,但我不应该更改什么?
我像这样在视图控制器中隐藏状态栏:
override func viewWillAppear(_ animated: Bool)
UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelStatusBar
super.viewWillAppear(animated)
编辑:即使我评论隐藏状态栏的行,我的滚动视图仍然存在同样的问题。所以问题不在于我如何隐藏它。
【问题讨论】:
尝试在滚动视图上将内容插入更改为“从不”。 【参考方案1】:正如Sam 所说,我在滚动视图上将content insets
更改为“从不”,它可以正常工作。
【讨论】:
【参考方案2】:虽然与您的问题无关,但我必须对您隐藏状态栏的方式做出反应 - 正确的方法是在您的视图控制器中覆盖 prefersStatusBarHidden
并在您的 viewWillAppear
中调用 self.setNeedsStatusBarAppearanceUpdate()
:
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
【讨论】:
可以但是这个方法不行,我已经试过了……不过这里不是问题 @cusmar 它有效,我刚刚尝试过.. 如果它不适合你,那只是意味着你没有正确地做某事.. 是BorneVC
@987654332 的 rootViewController @?如果不是,它是如何呈现的?
如何检查? BorneVC 是一个连接到导航控制器的视图控制器。此导航控制器以模态方式呈现,全屏,垂直覆盖。我不知道这是否是件好事,因为当我在 BorneVC 之后添加一个新的视图控制器,并将一个按钮从 BorneVC 连接到它时,我的新视图控制器似乎也显示为模态(垂直),而不是经典的表演过渡。你知道什么会导致这个错误吗?
我应该把扩展放在哪里?在我的 BorneVC 文件中?
@cusmar 要么创建一个新的swift文件,要么在BorneVC
的类定义之后以上是关于如何修复为啥在 Xcode 中 ScrollView 后面有状态栏空间?的主要内容,如果未能解决你的问题,请参考以下文章