如何在 IOS 11 之前以编程方式获取安全区域的高度?
How to get Height of Safe Area Programmatically Prior to IOS 11?
在不使用 safeAreaLayoutGuide(我的目标是 IOS 9+)的情况下,有没有什么方法可以通过编程方式获取 IOS 中 "safe area" 的高度,而无需创建新视图(限制在安全区内)仅仅是为了这个目的?
我无法将插座设置到安全区域,因为它不是 UIView...甚至是任何类型的 class。
如果我只是在ViewController中使用self.view.height,它会太高(错误)。
还有其他方法吗?
在 UIViewController
中,您可以像这样使用顶部和底部布局指南:
let safeAreHeight = self.view.frame.height - self.topLayoutGuide.length - self.bottomLayoutGuide.length
对于 UIView
,您可以使用 safeAreaLayoutGuide
进行条件检查:
let verticalSafeAreaInset: CGFloat
if #available(iOS 11.0, *) {
verticalSafeAreaInset = self.view.safeAreaInsets.bottom + self.view.safeAreaInsets.top
} else {
verticalSafeAreaInset = 0.0
}
let safeAreaHeight = self.view.frame.height - verticalSafeAreaInset
由于设备运行 iOS9和10没有安全区,所以默认0.0是安全的。
在不使用 safeAreaLayoutGuide(我的目标是 IOS 9+)的情况下,有没有什么方法可以通过编程方式获取 IOS 中 "safe area" 的高度,而无需创建新视图(限制在安全区内)仅仅是为了这个目的?
我无法将插座设置到安全区域,因为它不是 UIView...甚至是任何类型的 class。
如果我只是在ViewController中使用self.view.height,它会太高(错误)。
还有其他方法吗?
在 UIViewController
中,您可以像这样使用顶部和底部布局指南:
let safeAreHeight = self.view.frame.height - self.topLayoutGuide.length - self.bottomLayoutGuide.length
对于 UIView
,您可以使用 safeAreaLayoutGuide
进行条件检查:
let verticalSafeAreaInset: CGFloat
if #available(iOS 11.0, *) {
verticalSafeAreaInset = self.view.safeAreaInsets.bottom + self.view.safeAreaInsets.top
} else {
verticalSafeAreaInset = 0.0
}
let safeAreaHeight = self.view.frame.height - verticalSafeAreaInset
由于设备运行 iOS9和10没有安全区,所以默认0.0是安全的。