优雅地将 UIView 移动到键盘的 inputAccessoryView

Posted

技术标签:

【中文标题】优雅地将 UIView 移动到键盘的 inputAccessoryView【英文标题】:Elegantly move a UIView to a keyboard's inputAccessoryView 【发布时间】:2015-11-12 19:07:32 【问题描述】:

是否有一种优雅的方式可以将位于其父视图底部的UIView(即UIButton)无缝移动到键盘的inputAccessoryView

我设想键盘在滑入时基本上会拿起按钮并将其向上拖动。请参阅下面的模型。显然,我也希望反过来也可以。

我知道如何将两者分开,但我不知道如何将它们结合起来。有谁以前做过吗?

谢谢!

更新:我忘了提到我主要在UIScrollViews 的上下文中工作。虽然 André 下面的答案适用于普通视图,但在滚动视图中使用时会中断。

【问题讨论】:

【参考方案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()
    
  

【讨论】:

感谢您的回复,安德烈!只要我使用普通视图,它就可以正常工作。我忘了在我的帖子中提到我主要使用滚动视图,在这种情况下,这种方法不再适用。然后按钮会随着内容滚动。 如果你从滚动视图中排除按钮怎么办? 哦,是的,对。我认为那会奏效。当键盘隐藏时,它只会让我滚动按钮下方的内容。但我不确定这是否会成为问题。明天一定会试试的。我会让你知道这是怎么回事。再次感谢! 您可以简单地将滚动视图底部内容设置为登录按钮的高度。 :)

以上是关于优雅地将 UIView 移动到键盘的 inputAccessoryView的主要内容,如果未能解决你的问题,请参考以下文章

为某些元素设置动画时遇到问题 UIView 将排除其他元素

SWIFT:用键盘向上移动的UIView,在初始移动后移动非常奇怪,不会回落

如果键盘阻止了文本视图,则移动 UIView

在键盘上计算和移动 UIView(显示/隐藏)

出现键盘时无法上移自定义 UIView

如何动态地将动画添加到队列中