Как переместить UITextField вверх в syn c при перемещении клавиатуры вверх? - PullRequest
0 голосов
/ 10 января 2020

У меня есть UITextField, встроенный в UIScrollView. Текстовое поле скрывается клавиатурой при появлении клавиатуры.

Я использую следующий код, который устанавливает наблюдателей для UIResponder.keyboardWillShowNotification и UIResponder.keyboardWillHideNotification и соответственно устанавливает contentInset UIScrollView.

extension ViewController {
    func addKeyboardNotificationsObserver() {
        NotificationCenter.default.addObserver(
            self,
            selector: #selector(keyboardWillBeShown(notification:)),
            name: UIResponder.keyboardWillShowNotification,
            object: nil
        )
        NotificationCenter.default.addObserver(
            self,
            selector: #selector(keyboardWillBeHidden(notification:)),
            name: UIResponder.keyboardWillHideNotification,
            object: nil
        )
    }
    @objc func keyboardWillBeShown(notification: NSNotification) {
        guard
            let kbRect = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect,
            let duration = notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? NSNumber,
            let curve = notification.userInfo?[UIResponder.keyboardAnimationCurveUserInfoKey] as? NSNumber
        else { return }

        let insets = UIEdgeInsets(top: 0, left: 0, bottom: kbRect.height, right: 0)

        UIView.animate(
            withDuration: duration.doubleValue,
            delay: .zero,
            options: .init(rawValue: curve.uintValue << 16),
            animations: {
                self.scrollView.contentInset = insets
                self.scrollView.scrollIndicatorInsets = insets
            },
            completion: nil
        )
    }
    @objc func keyboardWillBeHidden(notification: NSNotification) {
        scrollView.contentInset = .zero
        scrollView.scrollIndicatorInsets = .zero
    }
}

Код работает. Однако текстовое поле частично скрывается при появлении клавиатуры. Текстовое поле появляется вверх в конце анимации.

GIF of keyboard moving up

GIF of keyboard moving up in slow motion

Может кто-нибудь указать, как это исправить, чтобы текстовое поле двигалось синхронно c с приближающейся клавиатурой и не появляется как подпрыгивающая ближе к концу анимации?

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