Вид продолжает двигаться вниз в iPhoneX на клавиатуре - PullRequest
0 голосов
/ 04 сентября 2018

Я провожу тесты на разных устройствах и заметил проблему, когда прихожу на тестирование на iPhone X.

В принципе, на мой взгляд, у меня есть изображение, текстовое поле и кнопка; все в виде стека, центрированного по горизонтали и вертикали. Когда я нажимаю на текстовое поле и клавиатура появляется, я перемещаю представление вверх, чтобы не блокировать содержимое с помощью клавиатуры, и наоборот, когда клавиатура возвращается. Вот мой код:

@objc func keyboardWillShow(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        if self.view.frame.origin.y == 0{
            self.view.frame.origin.y -= keyboardSize.height/2
        }
    }
}

@objc func keyboardWillHide(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        if self.view.frame.origin.y != 0{
            self.view.frame.origin.y += keyboardSize.height/2
        }
    }
}

Я добавил наблюдателей для viewDidLoad ():

NotificationCenter.default.addObserver(self, selector: #selector(nameVC.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(nameVC.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)

Это отлично работает на всех типах устройств в симуляторе - кроме iPhone X.

Как показано на рисунке ниже, когда клавиатура iPhone X закрывается, изображение перемещается вниз. Это происходит снова и снова, пока текстовое поле не будет закрыто клавиатурой, и мне придется перезапустить приложение, чтобы восстановить контроль.

Я полностью озадачен этим, как этот код может работать на всех типах устройств, кроме iPhone X?

Пожалуйста, кто-нибудь может помочь ![enter image description here

1 Ответ

0 голосов
/ 04 сентября 2018

Вы должны использовать keyboardFrameEndUserInfoKey вместо keyboardFrameBeginUserInfoKey, который возвращает правильную высоту с safeAreaInsets .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...