Я провожу тесты на разных устройствах и заметил проблему, когда прихожу на тестирование на 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?
Пожалуйста, кто-нибудь может помочь