Я создаю интерфейс чата и как WhatsApp, я создал кнопку «scrollToBottom», которая появляется, когда пользователь прокручивает коллекцию с определенным расстоянием. Эта кнопка прекрасно следует за клавиатурой, когда клавиатура появляется, и когда она исчезает, единственная проблема заключается в том, что клавиатура отклоняется в интерактивном режиме, я не могу сделать эту кнопку за рамкой клавиатуры. Только после того, как клавиатура скрыта, система отправляет уведомление, а кнопка меняет свою константу.Получите высоту клавиатуры при интерактивном прокрутке с прокруткой
Я пробовал все уведомления о клавиатуре, и никто из них не помог мне с этой проблемой. Мне нужно что-то вовремя, что заставляет кнопку следовать за клавиатурой без каких-либо задержек. Даже UIKeyboardWillChangeFrameNotification
не работали для меня.
NSNotificationCenter.defaultCenter().addObserver(self,
selector:#selector(self.keyboardWillShow(_:)),
name:UIKeyboardWillShowNotification,
object:nil)
NSNotificationCenter.defaultCenter().addObserver(self,
selector:#selector(self.keyboardWillHide(_:)),
name:UIKeyboardWillHideNotification,
object:nil)
private func configureConstantViewNewMessages(notification: NSNotification){
if let userInfo = notification.userInfo {
let animationDuration = (userInfo[UIKeyboardAnimationDurationUserInfoKey] as! NSNumber).doubleValue
let keyboardEndFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue()
let convertedKeyboardEndFrame = view.convertRect(keyboardEndFrame, fromView: view.window)
let rawAnimationCurve = (notification.userInfo![UIKeyboardAnimationCurveUserInfoKey] as! NSNumber).unsignedIntValue << 16
let animationCurve = UIViewAnimationOptions(rawValue: UInt(rawAnimationCurve))
self.kNewMessages.constant = CGRectGetMaxY(view.bounds) - CGRectGetMinY(convertedKeyboardEndFrame) + 10
UIView.animateWithDuration(animationDuration, delay: 0.0, options: [.BeginFromCurrentState, animationCurve], animations: {
self.view.layoutIfNeeded()
}, completion: nil)
}
}
С выше коде, я вызываю метод configureConstantViewNewMessages
анимировать константу моей кнопки (kNewMessages), и он может изменить свое положение в зависимости от высоты клавиатуры.
Благодарим за поддержку и жаль английских ошибок.
Внутри .animateWithDuration блока, поставить рамку вашей кнопки, где вы хотите быть помещены в конце отмена клавиатуры (например, если вы хотите ее внизу, это будет что-то вроде button.frame.size.height = scrollView.contentSize.height). Или вы можете добиться этого с помощью ограничения, которое удерживает кнопку и изменяет значение этого ограничения (все еще внутри animateWithDuration и вызывать layoutIfNeeded()) каждый раз, когда клавиатура отображается или отклоняется. – Cristian
Я уже делаю это, используя второй вариант, я использую ограничение кнопки, связанное с нижним, и изменяю его значение каждый раз, когда меняется рамка клавиатуры. Но моя проблема связана с увольнением клавиатуры при прокрутке моего вида коллекции. Я хотел бы сделать кнопку, следуя рамке клавиатуры, когда пользователь в интерактивном режиме отбрасывает ее. Я не знаю, немного ли странно, как я объясняю. –