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

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

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

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

谢谢!

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

【问题讨论】:

    标签: ios uiview uitextfield uianimation inputaccessoryview


    【解决方案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()
        }
      }
    }
    

    【讨论】:

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