Как предотвратить перемещение клавиатуры вверх, когда она уже показана - PullRequest
0 голосов
/ 30 декабря 2018

Когда я щелкаю по текстовому полю, клавиатура перемещается вверх, но как только я щелкаю по другому текстовому полю, оно еще больше перемещается.Спасибо за вашу помощь.

func keyboardStates() {
        NotificationCenter.default.addObserver(self, selector: 
#selector(keyboardWillChange(notification:)), name: 
UIResponder.keyboardWillShowNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: 
#selector(keyboardWillChange(notification:)), name: 
UIResponder.keyboardWillHideNotification, object: nil)
}

deinit {
    NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)
}


@objc func keyboardWillChange(notification: Notification){

    guard let keyboardRect = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else {

        return
    }

    if notification.name == UIResponder.keyboardWillShowNotification {
        view.frame.origin.y = -keyboardRect.height/3
    } else {
        view.frame.origin.y = 0
    }
}

Ответы [ 3 ]

0 голосов
/ 30 декабря 2018
var keyboardHasShown = false 

@objc func keyboardWillChange(notification: Notification){

guard let keyboardRect = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else {

    return
}

if notification.name == UIResponder.keyboardWillShowNotification {
    if keyboardHasShown == false {
      view.frame.origin.y = -keyboardRect.height/3

   }
    keyboardHasShown = true
} else {
    view.frame.origin.y = 0
    keyboardHasShown = false
}
}
0 голосов
/ 30 декабря 2018

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

https://github.com/hackiftekhar/IQKeyboardManager

Попробуйте и я уверяю, вам тоже понравится.

С уважением, Хариш

0 голосов
/ 30 декабря 2018

Попробуйте метод ниже,

@objc
    func keyboardWillChange(_ notification: NSNotification) {
        guard let duration = notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double else { return }
        guard let curve = notification.userInfo?[UIResponder.keyboardAnimationCurveUserInfoKey] as? UInt else { return }
        guard let startingFrame = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue else { return }
        guard let endingFrame = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else { return }
        let deltaY = endingFrame.origin.y - startingFrame.origin.y
        UIView.animateKeyframes(withDuration: duration, delay: 0.0, options: UIView.KeyframeAnimationOptions(rawValue: curve), animations: {
            self.frame.origin.y += deltaY
        }, completion: nil)
    }
...