У меня есть UICollectionView
, а внизу у меня есть UIView
, основная цель которого - действовать как контейнер для пары UIButton
s и UITextView
.
Теперь я установил UIKeyboardWillShow
и UIKeyboardWillHide
, и они работают, анимируя messageViewBottomConstraint
, чтобы сдвинуть контейнер.
private func setKeyboardNotifications() {
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide(_:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
@objc func keyboardWillShow(_ notification: NSNotification) {
let keyboardFrame = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as AnyObject).cgRectValue
guard let keyboardDuration = notification.userInfo?[UIKeyboardAnimationDurationUserInfoKey] as? Double else { return }
UIView.animate(withDuration: keyboardDuration) {
self.messageViewBottomConstraint.constant = -keyboardFrame!.height
self.view.layoutIfNeeded()
}
}
@objc func keyboardWillHide(_ notification: NSNotification) {
guard let keyboardDuration = notification.userInfo?[UIKeyboardAnimationDurationUserInfoKey] as? Double else { return }
UIView.animate(withDuration: keyboardDuration) {
self.messageViewBottomConstraint.constant = 0
self.view.layoutIfNeeded()
}
}
Я бы хотел реализовать функцию скольжения вниз UICollectionView
, которая позволяет отклонять ключевое слово при перемещении вниз.
override func viewDidLoad() {
super.viewDidLoad()
collectionView.keyboardDismissMode = .interactive
}
Проблема в том, что я не уверен, как отслеживать, где находится рамка клавиатуры, чтобы я мог анимировать messageViewBottomConstaint
с ее помощью. В противном случае контейнер, содержащий UITextView
, сдвигается вниз только после того, как клавиатура полностью закрыта (что не является хорошим UX)