Swift Move View с клавиатурой - PullRequest
0 голосов
/ 05 июля 2018

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

У меня проблема в том, что высоты кажутся разными: KBH1 выводит 216, а KBH2 выводит 260.

Это приводит к тому, что представление перемещается вниз дальше, чем оно было первоначально перемещено.

Как бы я исправить это?

extension UIViewController {

    func addKeyboardFunctions() {

        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboardEx))
       // tap.cancelsTouchesInView = false
        view.addGestureRecognizer(tap)
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillDisappear), name: Notification.Name.UIKeyboardWillHide, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillAppear), name: Notification.Name.UIKeyboardWillShow, object: nil)
    }

    @objc func keyboardWillAppear(_ 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
                print("KBH: \(keyboardSize.height)")
            }
        }
    }

    @objc func keyboardWillDisappear(_ 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
                print("KBH: \(keyboardSize.height)")
            }
        }
    }

1 Ответ

0 голосов
/ 05 июля 2018

Проблема в том, что вы используете UIKeyboardFrameBeginUserInfoKey.

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

Я использовал это расширение много, я думаю, что это было для Swift 2

func getKeyboardHeight(notification: NSNotification) -> CGFloat {
    let userInfo = notification.userInfo
    let keyboardSize = userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue
    return keyboardSize.CGRectValue().height
}

Вы должны быть в состоянии обновить это для Swift 4, но наиболее важной частью является использование конечного кадра, а не начала

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