Changing Constraint when Keyboard Appears - Swift(键盘出现时更改约束-SWIFT)
问题描述
我的UIView在键盘出现时无法正常移动。UIView中有一个UITextView,我用它来输入文本。如果我选择TextView来输入文本,键盘会出现,但UIView第一次不会移动。如果我轻触背景并使键盘消失,然后再次轻触TextView,则UIView会正确上移。有人知道这里发生了什么事吗?
class ChatViewController: UIViewController, CNContactPickerDelegate, UISearchBarDelegate, UITableViewDelegate, UITableViewDataSource, UIToolbarDelegate, UITextFieldDelegate, UITextViewDelegate {
@IBOutlet weak var composeTextView: UITextView!
@IBOutlet weak var composeViewBottomConstraint: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
composeTextView.delegate = self
}
func textViewDidBeginEditing(_ textView: UITextView) {
UIView.animate(withDuration: 0.5){
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow), name: .UIKeyboardWillShow, object: nil)
}
self.view.layoutIfNeeded()
}
@objc func keyboardWillShow(notification: Notification) {
let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue
let keyboardHeight = keyboardSize?.height
if #available(iOS 11.0, *){
self.composeViewBottomConstraint.constant = keyboardHeight! - view.safeAreaInsets.bottom
}
else {
self.composeViewBottomConstraint.constant = view.safeAreaInsets.bottom
}
self.view.layoutIfNeeded()
}
}
推荐答案
问题是,第一次单击textView没有向上的视图是在BeginEditing中添加了showKeyboard观察器,所以该行应该在viewDidLoad
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow), name: .UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide), name: .UIKeyboardWillHide, object: nil)
除以下修复外
func textViewDidBeginEditing(_ textView: UITextView) {
// I think no need for it
}
@objc func keyboardWillShow(notification: Notification) {
let keyboardSize = (notification.userInfo? [UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue
let keyboardHeight = keyboardSize?.height
if #available(iOS 11.0, *){
self.composeViewBottomConstraint.constant = keyboardHeight! - view.safeAreaInsets.bottom
}
else {
self.composeViewBottomConstraint.constant = view.safeAreaInsets.bottom
}
UIView.animate(withDuration: 0.5){
self.view.layoutIfNeeded()
}
}
@objc func keyboardWillHide(notification: Notification){
self.composeViewBottomConstraint.constant = 0 // or change according to your logic
UIView.animate(withDuration: 0.5){
self.view.layoutIfNeeded()
}
}
这篇关于键盘出现时更改约束-SWIFT的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!