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.