获取键盘的高度在IOS 11testing版上不起作用

我有下面的代码在IOS 10上工作,但现在它不再工作了,当在IOS 11testing版上运行。

if let userInfo = notification.userInfo { if let keyboardSize = (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { print(keyboardSize) } } 

这是我打印尺寸时得到的结果:

 (0.0, 0.0, 0.0, 0.0) (0.0, 736.0, 414.0, 0.0) 

任何人都知道为什么这个停止工作? 或者,如果我有其他的select来获得键盘大小?

使用UIKeyboardFrameEndUserInfoKey而不是UIKeyboardFrameBeginUserInfoKey

因此,将您的代码更改为以下内容将解决您的问题:

 if let userInfo = notification.userInfo { if let keyboardSize = (userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue { print(keyboardSize) } } 

我有同样的问题。 Doug Amos的回答是对的。 我只想说清楚。 这是我的代码:

 @objc func keyboardWillShow(notification:NSNotification){ var userInfo = notification.userInfo! var keyboardFrame:CGRect = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue if keyboardFrame.size.height <= 0 { // to fix bug on iOS 11 keyboardFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue } keyboardFrame = self.view.convert(keyboardFrame, from: nil) } 

我在Swif 3+的应用程序中使用了这个代码

  var userInfo = notification.userInfo if let keyboardFrame = (userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue{ print(keyboardFrame.height) if keyboardFrame.size.height <= 0 { // To fix bug on iOS 11 if let newKeyboardFrame = (userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue{ print(newKeyboardFrame.height) } } } view.layoutIfNeeded() 
 func keyboardWillShow(_ notification: Foundation.Notification) { if let keyboardSize = notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? CGRect { print(keyboardSize) } }