ios - custom - ¿Espacio extra/relleno en el iPhone X?




navigation bar swift 4 (4)

En Objective-C

if (@available(iOS 11.0, *)) {
   UIWindow *window = UIApplication.sharedApplication.keyWindow;
   CGFloat bottomPadding = window.safeAreaInsets.bottom;
}

En el iPhone X en modo retrato, si establece una restricción inferior en área segura a 0, obtendrá un espacio adicional en la parte inferior de la pantalla. ¿Cómo se obtiene mediante programación la altura de este relleno adicional?

Me las arreglé para determinar manualmente la altura de este relleno, que es de 34 y aquí es cómo pude implementarlo con detección de iPhone X

Swift 4.0 y 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
    }
}

¿Hay una forma más limpia de detectar la altura de este relleno?


En iOS 11, las vistas tienen una propiedad safeAreaInsets . Si obtiene la propiedad bottom de estas inserciones, puede obtener la altura del relleno inferior mientras está en el iPhone X:

if #available(iOS 11.0, *) {
    let bottomPadding = view.safeAreaInsets.bottom
    // ...
}

(Igualmente para el relleno superior con barra de estado)


Use esta línea para convertirse en su valor más bajo para iPhoneX

if #available(iOS 11.0, *) {
            let bottomPadding = view.safeAreaInsets.bottom
  }

y no olvide agregar esto en layoutSubviews () porque safeAreaInsets tiene el tamaño correcto en layoutSubviews () de lo contrario, se convertirá en valores erróneos.


var bottomPadding: CGFloat = 0.0
if #available(iOS 11.0, *) {
     let window = UIApplication.shared.keyWindow
     bottomPadding = window?.safeAreaInsets.bottom ?? 0.0
}

Ahora puede utilizar el bottomPadding según sus necesidades.







iphone-x