错误的键盘隐藏
Wrong keyboard hide
我在使用 tableView.keyboardDismissMode = .onDrag
时遇到了一些奇怪的问题。
textField
点一下就可以了。然后我想完全像在 iMessage 中一样关闭我的键盘,但在我的情况下,当 keyboardWillHide
通知调用 view.frame.origin.y
不等于 0。它等于 12。有趣的是,我的代码在模拟器中运行得非常好,但只有这个错误on real iPhone 11. 有什么想法吗?
我的带有键盘通知的代码
@objc func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
self.view.frame.origin.y = -keyboardSize.size.height + (self.tabBarController?.tabBar.bounds.height)!
}
}
@objc func keyboardWillHide(notification: NSNotification) {
self.view.frame.origin.y = 0
}
我找到了解决方案。麻烦是因为 keyboardWillShow 多次调用。
处理它的代码。
@objc func keyboardWillShow(notification: NSNotification) {
var _kbSize:CGSize!
if let info = notification.userInfo {
let frameEndUserInfoKey = UIResponder.keyboardFrameEndUserInfoKey
// Getting UIKeyboardSize.
if let kbFrame = info[frameEndUserInfoKey] as? CGRect {
let screenSize = UIScreen.main.bounds
let intersectRect = kbFrame.intersection(screenSize)
if intersectRect.isNull {
_kbSize = CGSize(width: screenSize.size.width, height: 0)
} else {
_kbSize = intersectRect.size
}
if _kbSize.height != 0 {
self.view.frame.origin.y = -_kbSize.height + (self.tabBarController?.tabBar.bounds.height)!
} else {
self.view.frame.origin.y = 0
}
}
}
}
我在使用 tableView.keyboardDismissMode = .onDrag
时遇到了一些奇怪的问题。
textField
点一下就可以了。然后我想完全像在 iMessage 中一样关闭我的键盘,但在我的情况下,当 keyboardWillHide
通知调用 view.frame.origin.y
不等于 0。它等于 12。有趣的是,我的代码在模拟器中运行得非常好,但只有这个错误on real iPhone 11. 有什么想法吗?
我的带有键盘通知的代码
@objc func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
self.view.frame.origin.y = -keyboardSize.size.height + (self.tabBarController?.tabBar.bounds.height)!
}
}
@objc func keyboardWillHide(notification: NSNotification) {
self.view.frame.origin.y = 0
}
我找到了解决方案。麻烦是因为 keyboardWillShow 多次调用。 处理它的代码。
@objc func keyboardWillShow(notification: NSNotification) {
var _kbSize:CGSize!
if let info = notification.userInfo {
let frameEndUserInfoKey = UIResponder.keyboardFrameEndUserInfoKey
// Getting UIKeyboardSize.
if let kbFrame = info[frameEndUserInfoKey] as? CGRect {
let screenSize = UIScreen.main.bounds
let intersectRect = kbFrame.intersection(screenSize)
if intersectRect.isNull {
_kbSize = CGSize(width: screenSize.size.width, height: 0)
} else {
_kbSize = intersectRect.size
}
if _kbSize.height != 0 {
self.view.frame.origin.y = -_kbSize.height + (self.tabBarController?.tabBar.bounds.height)!
} else {
self.view.frame.origin.y = 0
}
}
}
}