我陷入问题“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中将其删除。

07-26 06:18