【发布时间】:2018-10-16 14:59:10
【问题描述】:
我的视图底部有一个文本输入字段,我正在尝试对其进行上下动画以保持在键盘顶部。
func setupKeyboardObservers() {
NotificationCenter.default.addObserver(self, selector: #selector(handleKeyboardWillChangeFrame), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(handleKeyboardDidShow), name: UIResponder.keyboardDidShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(handleKeyboardWillChangeFrame), name: UIResponder.keyboardWillHideNotification, object: nil)
}
@objc func handleKeyboardWillChangeFrame(notification: NSNotification) {
let keyboardFrame = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue
let keyboardDuration = (notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double)
print(keyboardFrame)
orderDetailView?.textInputViewBottomAnchor?.constant = -keyboardFrame!.height
UIView.animate(withDuration: keyboardDuration!) {
self.view.layoutIfNeeded()
}
}
OrderDetailView 是视图控制器的视图。
textinputview 是动画的部分,当键盘第一次出现时它可以正常工作,但是当我发送消息并且键盘退出第一响应者时,或者如果我通过在键盘外部单击而退出firstresponder,它不会动画回来。
当我从keyboardFrameEndUserInfoKey 打印cgrect 值时,它返回与键盘存在时相同的帧值(而不是0)。
这似乎只有在我从视图中向下拖动键盘时才能正常工作。
感谢您的帮助。
【问题讨论】:
标签: ios swift uitextfield