iPhoneX e iPhone 8 altura do teclado são diferentes

Eu uso o código abaixo para obter a altura do teclado. Em seguida, use essa altura para calcular o quadro de umUIView para garantir que issoUIView apenas na parte superior do teclado.

Mas no simulador iPhoneX a saída é333 e o simulador do iPhone 8 é258.

QUESTÃO: Se usarrect.height como a altura do teclado para o simulador do iPhone 8, o layout está correto. Para o iPhone X, existe um espaço entre oUIView e teclado. Que significa333 é maior que a altura real do teclado no iPhone X.

Qual o motivo da altura ser diferente? E como obter a altura correta do 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)
        } 
    }

Como esta imagem, a borda verde deve ser a parte extra. Na verdade, preciso da parte vermelha na parte superior do teclado, sem a lacuna de retidão verde.

EDITAR

OK, com a ajuda do @ Craig, encontrei esse método apenas chamado pelo iPhone X. Portanto, atualizo o quadro aqui. Basta colar o código aqui.

A altura inferior da área segura é 22.0 parece não estar correta.

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 deve ser 34,0, mas se você estiver usando a exibição de contêiner, esse valor poderá ser diferente, como o meu é 22,0.

questionAnswers(4)

yourAnswerToTheQuestion