Элегантно переместить UIView на inputAccessoryView клавиатуры

Есть ли элегантный способ плавного перемещения UIView (т.е. UIButton), который живет в нижней части своего родительского представления, к клавиатуре inputAccessoryView?

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

Я знаю, как сделать оба по отдельности, но я не знаю, как их объединить. Кто-нибудь, кто делал это раньше?

Спасибо!

Иллюстрация идеи

Обновление: я забыл упомянуть, что я в основном работаю в контексте UIScrollViews, Хотя приведенный ниже ответ Андре прекрасно работает для обычных представлений, он прерывается при использовании его с представлениями с прокруткой.

1 ответ

Решение

В этом случае вы можете игнорировать использование inputaccessoryview и вместо этого настроить нижнее ограничение кнопки входа в уведомлениях клавиатуры.

class ViewController: UIViewController {
  @IBOutlet weak var signInButtonBottomConstraint: NSLayoutConstraint!

  override func viewDidLoad() {
    super.viewDidLoad()

    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name: UIKeyboardWillShowNotification, object: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name: UIKeyboardWillHideNotification, object: nil)
  }

  func keyboardWillShow(notification: NSNotification) {
    let userInfo = notification.userInfo!

    let animationDuration = userInfo[UIKeyboardAnimationDurationUserInfoKey] as! Double
    let keyboardEndFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue()

    signInButtonBottomConstraint.constant = keyboardEndFrame.height
    UIView.animateWithDuration(animationDuration) { () -> Void in
      self.view.layoutIfNeeded()
    }
  }

  func keyboardWillHide(notification: NSNotification) {
    let userInfo = notification.userInfo!

    let animationDuration = userInfo[UIKeyboardAnimationDurationUserInfoKey] as! Double

    signInButtonBottomConstraint.constant = 0.0
    UIView.animateWithDuration(animationDuration) { () -> Void in
      self.view.layoutIfNeeded()
    }
  }
}
Другие вопросы по тегам