使用safeAreaLayoutGuide没有状态栏

时间:2017-12-10 07:09:21

标签: ios iphone swift autolayout padding

我以编程方式添加了所有视图以及它们的自动布局约束。在我的一个视图中,我使用以下方法禁用了状态栏:

override var prefersStatusBarHidden: Bool {
    return true
}

显然,这会导致safeAreaLayoutGuide在iPhone X上的任何内容上移动20px。在我的情况下,这会导致iPhone 6/7/8 / SE等顶部没有足够的填充。

解决这个问题的最简洁方法是什么?你会如何添加填充,例如在没有将其添加到iPhone X的iPhone 8视图中?

2 个答案:

答案 0 :(得分:2)

您可以使状态栏透明以保留空格,而不是使用prefersStatusBarHidden。在间距方面,这对iPhone X没有任何影响。

let statusBarWindow = application.value(forKey: "statusBarWindow") as? UIWindow
statusBarWindow.alpha = 0.0

"statusBarWindow"实际上是私有API,所以最好像"status" + "BarWindow"之类的那样将其拆开。

答案 1 :(得分:2)

我猜您可能会使用以下解决方案: 开始创建一个自定义视图(让它称之为fakeStatusBar),它应该与状态栏框架匹配,具有以下约束:

enter image description here

请注意,身高= 20是不够的,因为状态栏的高度取决于您的设备(iPhone 8 plus = 20,iPhoneX> 20),因此您必须动态更改:

enter image description here

self.fakeStatusBarHeight.constant = UIApplication.shared.statusBarFrame.size.height // or whatever you like, considering your padding too

所以在这一步我们有一个很好的空间,感谢fakeStatusBar,然后让你的内部视图约束这个(当然高度= 40只是一个例子):

enter image description here

最终结果是:

<强> iPhoneX

enter image description here

iPhone 8 plus:

enter image description here