我以编程方式添加了所有视图以及它们的自动布局约束。在我的一个视图中,我使用以下方法禁用了状态栏:
override var prefersStatusBarHidden: Bool {
return true
}
显然,这会导致safeAreaLayoutGuide在iPhone X上的任何内容上移动20px。在我的情况下,这会导致iPhone 6/7/8 / SE等顶部没有足够的填充。
解决这个问题的最简洁方法是什么?你会如何添加填充,例如在没有将其添加到iPhone X的iPhone 8视图中?
答案 0 :(得分:2)
您可以使状态栏透明以保留空格,而不是使用prefersStatusBarHidden
。在间距方面,这对iPhone X没有任何影响。
let statusBarWindow = application.value(forKey: "statusBarWindow") as? UIWindow
statusBarWindow.alpha = 0.0
"statusBarWindow"
实际上是私有API,所以最好像"status" + "BarWindow"
之类的那样将其拆开。
答案 1 :(得分:2)
我猜您可能会使用以下解决方案: 开始创建一个自定义视图(让它称之为fakeStatusBar),它应该与状态栏框架匹配,具有以下约束:
请注意,身高= 20是不够的,因为状态栏的高度取决于您的设备(iPhone 8 plus = 20,iPhoneX> 20),因此您必须动态更改:
self.fakeStatusBarHeight.constant = UIApplication.shared.statusBarFrame.size.height // or whatever you like, considering your padding too
所以在这一步我们有一个很好的空间,感谢fakeStatusBar,然后让你的内部视图约束这个(当然高度= 40只是一个例子):
最终结果是:
<强> iPhoneX 强>
iPhone 8 plus: