Клавиатура прячется раньше, чем вид - PullRequest
0 голосов
/ 22 апреля 2019

Клавиатура добавляется в качестве подпредставления к контейнеру в нижней части контроллера представления коллекции, но при попытке скрыть его загрузка клавиатуры происходит быстрее, чем увеличение размера представления (темный экран появляется сразу после клавиатуры собираюсь спрятаться). Кроме того, при запуске проекта в первый раз за день клавиатура не отображается, пока я не нажму «command + K», а затем темный вид, поскольку размер клавиатуры появляется над клавиатурой и под входом.

    @objc func handleShowKeyboard(_ notification: Notification) {
        if let keyboaradSize: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as! NSValue? {
            let keyboardFram = keyboaradSize.cgRectValue
            UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseOut, animations: {
                self.view.frame.origin.y -= self.view.safeAreaInsets.bottom
                self.view.frame.origin.y -= keyboardFram.height
                self.view.layoutIfNeeded()

            }) { (completion) in

            }
        }
    }

    @objc func handleHideKeyboard(_ notification: Notification) {
        if let keyboaradSize: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as! NSValue? {
            let keyboardFram = keyboaradSize.cgRectValue
            UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseOut, animations: {

                self.view.frame.origin.y += self.view.safeAreaInsets.bottom
                self.view.frame.origin.y += keyboardFram.height
                self.view.layoutIfNeeded()

            }) { (completion) in

            }
        }
    }

enter image description here

1 Ответ

0 голосов
/ 22 апреля 2019

Прочитайте этот ключ

UIKeyboardAnimationDurationUserInfoKey

значение и используйте его как продолжительность анимации


guard let userInfo = notification.userInfo else {
    return
} 

guard let duration = userInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double,
    let curve =  userInfo[UIResponder.keyboardAnimationCurveUserInfoKey] as? UInt else {

        return
}
UIView.animate(withDuration: duration, delay: 0, options: [UIView.AnimationOptions(rawValue: curve)], animations: {
   ///
}) { (completed) in

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