NSNotification.Name.UIKeyboardWillShow
可以正常使用Apple键盘,但是当我Gboard时NSNotification.Name.UIKeyboardWillShow
被调用3次。
下面是我的代码:
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardDidShow(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
NotificationCenter.default.removeObserver(self, name: .UIKeyboardWillHide, object: nil)
NotificationCenter.default.removeObserver(self, name: .UIKeyboardWillShow, object: nil)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
view.endEditing(true)
}
@objc func keyboardWillHide(notification: Notification) {
self.view.frame.origin.y = 0
}
@objc func keyboardDidShow(notification: Notification) {
let info: NSDictionary = notification.userInfo! as NSDictionary
let keyboardSize = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
let keyboardY = self.view.frame.height - keyboardSize.height
let editingTextFieldY = self.reviewTextField.frame.origin.y
// This below 8 is the bottom constraint of the reviewTextField
let padding: CGFloat = self.reviewTextField.frame.height+8
if self.view.frame.origin.y >= 0 {
if editingTextFieldY > keyboardY - padding {
let yOffset = self.view.frame.origin.y - (editingTextFieldY - (keyboardY - padding))
self.view.frame.origin.y = yOffset
}
}
}