我陷入问题“keyboardWillShow”触发两次,但“keyboardWillHide”调用一次。
这是an example,一旦“keyboardWillShow”启动,我就在其中打印键盘尺寸。
我还将断点放在“viewDidLoad”中,并且观察者仅注册一次。
我添加了两个元素“UITextField”和“UITextView”,这两个元素的行为相同。
我正在使用iOS 9.2,swift lang。,xcode 7
在我的ViewController下面
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name: UIKeyboardWillHideNotification, object: nil)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
print("keyboardWillShow sizes: \(keyboardSize)")
}
}
func keyboardWillHide(notification: NSNotification) {
print("HideHideHide")
}
}
更新
第一次使用大小触发一次:
keyboardWillShow大小:(0.0、568.0、320.0, 253.0 )
对于其余的两次,它具有不同的大小:(第二个y位置也改变了高度)
keyboardWillShow大小:(0.0,568.0,320.0, 216.0 )
keyboardWillShow大小:(0.0, 352.0 ,320.0, 216.0 )
最佳答案
您可能订阅了多个UIKeyboardWillShowNotification
,却忘记了退订。
尝试在viewWillAppear
中添加观察者,并在viewWillDisappear
中将其删除。