我正在以编程的方式添加我的所有视图以及它们的自动布局约束。在我的一个视图中,我使用以下方法禁用了状态栏:
override var prefersStatusBarHidden: Bool {
return true
}显然,这会导致safeAreaLayoutGuide在任何不是iPhone X的东西上移动20 SE,而在我的例子中,这会导致iPhone 6/7/8/SE等的顶部没有足够的填充。
最干净的工作方法是什么?如何在iPhone 8视图上添加填充,而不将其添加到iPhone X中?
发布于 2017-12-10 09:10:22
您可以使状态栏透明,以保留空间,而不是使用prefersStatusBarHidden。就间距而言,这对iPhone X没有任何影响。
let statusBarWindow = application.value(forKey: "statusBarWindow") as? UIWindow
statusBarWindow.alpha = 0.0"statusBarWindow"实际上是私有API,所以最好像"status" + "BarWindow"之类的那样把它拆开。
发布于 2017-12-10 09:27:31
我想您可以使用以下解决方案:开始创建一个自定义视图(让我们称之为fakeStatusBar),该视图应该与状态栏框架相匹配,具有以下约束:

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

self.fakeStatusBarHeight.constant = UIApplication.shared.statusBarFrame.size.height // or whatever you like, considering your padding too因此,在这个步骤中,由于fakeStatusBar,我们有一个很好的空间,那么让我们约束您的内部视图这样做(当然,身高= 40只是一个例子):

最终结果是:
iPhoneX

iPhone 8+:

https://stackoverflow.com/questions/47736683
复制相似问题