Я пытаюсь отключить клавиатуру при смахивании вниз, но мой вид аксессуаров ввода (пользовательский класс 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()
}
}
}