Дополнительное нижнее пространство/дополнение на iPhone X?
В iPhone X в портретном режиме, если вы установите нижнее ограничение в безопасную область на 0, вы получите дополнительное пространство в нижней части экрана.
Как вы программно увеличиваете это дополнительное дополнение?
Мне удалось вручную определить высоту этого дополнения, которое составляет 34, и вот как мне удалось реализовать его с обнаружением iPhone X:
Swift 4.0 и Xcode 9.0
if UIDevice().userInterfaceIdiom == .phone
{
switch UIScreen.main.nativeBounds.height
{
case 2436: //iPhone X
self.keyboardInAppOffset.constant = -34.0
default:
self.keyboardInAppOffset.constant = 0
}
}
Есть ли более чистый способ определить высоту этого дополнения?
Ответы
Ответ 1
В iOS 11 представления имеют свойство safeAreaInsets
. Если вы получаете свойство bottom
этих вложений, вы можете получить высоту нижнего отступов, находясь на iPhone X:
if #available(iOS 11.0, *) {
let bottomPadding = view.safeAreaInsets.bottom
// ...
}
(аналогично верхнему заполнению со строкой состояния)
Ответ 2
В Objective-C
if (@available(iOS 11.0, *)) {
UIWindow *window = UIApplication.sharedApplication.keyWindow;
CGFloat bottomPadding = window.safeAreaInsets.bottom;
}
Ответ 3
Если у вас нет никакого вида, например CollectionViewLayout, вы также можете получить его из окна:
private static var itemHeight: CGFloat {
guard #available(iOS 11.0, *),
let window = UIApplication.shared.keyWindow else {
return Constants.itemHeight
}
return Constants.itemHeight - window.safeAreaInsets.bottom
}
Ответ 4
var bottomPadding: CGFloat = 0.0
if #available(iOS 11.0, *) {
let window = UIApplication.shared.keyWindow
bottomPadding = window?.safeAreaInsets.bottom ?? 0.0
}
Теперь вы можете использовать bottomPadding
в соответствии с вашими потребностями.
Ответ 5
используйте эту строку, чтобы стать вашим нижним значением для iPhoneX
if #available(iOS 11.0, *) {
let bottomPadding = view.safeAreaInsets.bottom
}
и не забудьте добавить это в layoutSubviews(), потому что safeAreaInsets имеет правильный размер в layoutSubviews(), иначе вы получите неправильные значения.
Ответ 6
iOS 11 (смесь из ответов выше)
let padding = UIApplication.shared.keyWindow?.safeAreaInsets.bottom?? 0