Переместить экран вверх, когда в iPhone X появляется клавиатура - PullRequest
0 голосов
/ 08 сентября 2018

Я использую код ниже для перемещения экрана вверх и вниз, когда клавиатура показывает и скрывает

override func viewDidLoad() {
    super.viewDidLoad()            
    NotificationCenter.default.addObserver(self, selector:#selector(ViewController.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(ViewController.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)    
}

@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
        }
    }        
}

@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
        }
    }
}

Работает на всех устройствах, кроме iPhone x (думаю, проблема в том, что iPhone X занимает низкое место)

Проблема заключается в том, что размер клавиатуры изменяется до и после отображения и приводит к тому, что изображение перемещается вниз, вниз и вниз ...

Может кто-нибудь помочь?

Ответы [ 3 ]

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

Вы должны также рассмотреть безопасные области вставки

let endFrame = (userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue ?? CGRect.zero
let bottomSpace = keyboardValues.endFrame.maxY - keyboardValues.endFrame.minY - self.view.safeAreaInsets.bottom

И ты не должен быть аддитивным. Эти уведомления могут быть опубликованы несколько раз. Используйте абсолютные значения.

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

Вот оно, Используйте IQKeyboardManagerSwift

Настройки AppDelegate.swift

IQKeyboardManager.shared.enable = true
IQKeyboardManager.shared.enableAutoToolbar = false

В My ViewController

func textViewShouldBeginEditing(_ textView: UITextView) -> Bool {
    print(#function)
    if DeviceType.checkiPhoneX() {
        IQKeyboardManager.shared.keyboardDistanceFromTextField = 40.0
    }        
    return true
}

 func textViewDidEndEditing(_ textView: UITextView) {
    if DeviceType.checkiPhoneX() {
        IQKeyboardManager.shared.keyboardDistanceFromTextField = 0.0
    }
}

Вот так я управляю клавиатурой для X.

Надеюсь, это поможет вам.

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

Использовать UIKeyboardFrameEndUserInfoKey вместо UIKeyboardFrameBeginUserInfoKey.

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