La altura del teclado de iPhoneX y iPhone 8 es diferente

Yo uso el siguiente código para obtener la altura del teclado. Luego use esta altura para calcular el marco de unUIView para asegurarse de que estoUIView justo en la parte superior del teclado.

Pero en el simulador de iPhoneX la salida es333 y el simulador de iPhone 8 es258.

PROBLEMA: Si usorect.height como la altura del teclado para el simulador de iPhone 8, el diseño es correcto. Para iPhone X hay una brecha entreUIView y teclado. Lo que significa333 es más alto que la altura real del teclado en iPhone X.

¿Cuál es la razón de la altura son diferentes? ¿Y cómo obtener la altura correcta del teclado?

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil)


@objc func keyboardWillShow(_ notification: NSNotification) {
        if let rect = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
           print(rect.height)
        } 
    }

Al igual que esta imagen, el borde verde debería ser la parte adicional. En realidad, necesito la parte roja justo en la parte superior del teclado sin el espacio recto verde.

EDITAR

OK, con la ayuda de @ Craig encontré este método solo llamado por iPhone X. Así que actualizo frame aquí. Solo pega el código aquí.

La altura del fondo del área segura es 22.0 parece incorrecta.

override func viewSafeAreaInsetsDidChange() {
    if #available(iOS 11.0, *) {
        super.viewSafeAreaInsetsDidChange()
        view.safeAreaInsets.bottom // This value is the bottom safe area place value.
    }
}

EDIT2 Normalmenteview.safeAreaInsets.bottom debería ser 34.0, pero si está utilizando la vista de contenedor, este valor puede ser diferente, como el mío es 22.0.

Respuestas a la pregunta(4)

Su respuesta a la pregunta