2016-07-12 1 views
2

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

Благодарим за поддержку и жаль английских ошибок.

+0

Внутри .animateWithDuration блока, поставить рамку вашей кнопки, где вы хотите быть помещены в конце отмена клавиатуры (например, если вы хотите ее внизу, это будет что-то вроде button.frame.size.height = scrollView.contentSize.height). Или вы можете добиться этого с помощью ограничения, которое удерживает кнопку и изменяет значение этого ограничения (все еще внутри animateWithDuration и вызывать layoutIfNeeded()) каждый раз, когда клавиатура отображается или отклоняется. – Cristian

+1

Я уже делаю это, используя второй вариант, я использую ограничение кнопки, связанное с нижним, и изменяю его значение каждый раз, когда меняется рамка клавиатуры. Но моя проблема связана с увольнением клавиатуры при прокрутке моего вида коллекции. Я хотел бы сделать кнопку, следуя рамке клавиатуры, когда пользователь в интерактивном режиме отбрасывает ее. Я не знаю, немного ли странно, как я объясняю. –

ответ

1

Используйте нижеприведенный код, который может работать.

override func viewWillAppear(animated: Bool) { 
      NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name: UIKeyboardWillShowNotification, object: nil) 
} 



func keyboardWillShow(notification:NSNotification) { 
     let userInfo:NSDictionary = notification.userInfo! 
     let keyboardFrame:NSValue = userInfo.valueForKey(UIKeyboardFrameEndUserInfoKey) as! NSValue 
     let keyboardRectangle = keyboardFrame.CGRectValue() 
     let keyboardHeight = keyboardRectangle.height 
     print(keyboardHeight) 
    } 
1

Добавить наблюдателя для уведомления о положении клавиатуры, когда клавиатура исчезнет.

Это уведомление предоставит вам информацию пользователя, содержащую информацию о ширине клавиатуры и высоты

Вы должны использовать эту документацию link

Смежные вопросы