获取键盘的高度不工作在IOS 11测试版

问题描述:

我有以下代码工作在IOS 10,但现在它不再工作时,在IOS 11测试版上运行。获取键盘的高度不工作在IOS 11测试版

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) 

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

+1

同样的问题https://*.com/questions/45569276/密码自动填充,quicktype吧 - 在-IOS-11? –

+0

@MartinR:是的,同样的问题在这里,以相同的修复答案:) – Kobe

使用UIKeyboardFrameEndUserInfoKey而不是UIKeyboardFrameBeginUserInfoKey

因此改变你的代码,下面将解决您的问题:

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

这是正确的答案,并应标记为这样 – aug2uag

我有同样的问题。 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) 
    } 
+0

这不是一个答案,应该是一个评论。它不会添加任何附加信息 – Vega

+0

这不会提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 - [来自评论](/ review/low-quality-posts/17691520) – clemens

+0

请考虑编辑Doug的回答。 – ivaigult

func keyboardWillShow(_ notification: Foundation.Notification) { 

    if let keyboardSize = notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? CGRect { 

     print(keyboardSize) 

    } 

} 

我用这个代码在我的应用程序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()