Вид аксессуаров ввода не прилипает к клавиатуре при смахивании, чтобы закрыть - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь отключить клавиатуру при смахивании вниз, но мой вид аксессуаров ввода (пользовательский класс uiview) не придерживается его при смахивании вниз. Он оставляет пространство между ним и клавиатурой и не синхронизируется с ним, а отключается только после того, как клавиатура исчезает. Он отлично работает при активации клавиатуры нажатием на текстовое представление / cmd + k для переключения вверх и вниз, но не при смахивании вниз. Судя по изображению, я смахиваю вниз, чтобы закрыть клавиатуру, но есть гигантский зазор. [1]: https://i.stack.imgur.com/xLV6u.jpg (извините, если у меня плохое форматирование, я все еще привыкаю к ​​публикации в stackoverflow)

Вот мой код, относящийся к этому:

// вспомогательное представление привязано к низу для начала


    func layoutInputAccessoryView() {
            view.addSubview(inputFieldAccessoryView)
            inputFieldAccessoryView.anchor(right: view.rightAnchor, left: view.leftAnchor)
            inputFieldAccessoryViewBottomAnchor = inputFieldAccessoryView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0)
            inputFieldAccessoryViewBottomAnchor?.isActive = true
        }

// прокрутка, чтобы закрыть в представлении коллекции collectionView.keyboardDismissMode = .interactive

// слушатель, когда отображается клавиатура / hides


    func addKBObserver() {
            NotificationCenter.default.addObserver(self, selector: #selector(handleKBWilShow), name: UIResponder.keyboardWillShowNotification, object: nil)
            NotificationCenter.default.addObserver(self, selector: #selector(handleKBWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
        }

// метод, когда клавиатура показывает


@objc func handleKBWilShow(notification: Notification) {
    if let frame = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
        let rect = frame.cgRectValue
        let height = rect.height
        
        inputFieldContainerBottom?.constant = -height
        view.layoutIfNeeded()
    }
}

// метод селектора, вызываемый, когда клавиатура скрывает


    @objc func handleKBWillHide(notification: Notification) {
       if let duration = notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double {
         UIView.animate(withDuration: duration) {
                    self.inputFieldContainerBottomAnchor?.constant = 0
                    self.view.layoutIfNeeded()
                }
            }
        }

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