iOS 11 – 键盘高度在键盘通知中返回0

我一直在使用键盘通知没有任何问题,并获得键盘的确切高度。

- (void)keyboardDidShow:(NSNotification *) notification{ CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; NSLog(@"%f",keyboardSize.height);} 

但在iOS 11中,调用通知时键盘的大小为0。

在这种情况下发生了什么问题? 我正在使用xcode 9 Beta 5

用这个:

 CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size; 

对于Swift,你可以使用:

 let keyboardSize = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue.size 

replaceUIKeyboardFrameBeginUserInfoKey

UIKeyboardFrameEndUserInfoKey

以下是来自Apple Docs。

UIKeyboardFrameBeginUserInfoKey – 包含CGRect的NSValue对象的关键字,用于标识屏幕坐标中键盘的起始帧。

UIKeyboardFrameEndUserInfoKey – 包含CGRect的NSValue对象的关键字,用于标识屏幕坐标中键盘的结束帧。

尝试这个:

UIKeyboardFrameBeginUserInfoKeyreplaceUIKeyboardFrameEndUserInfoKey

我有一个类似的问题使用Xcode版本9.0(9A235); 尽pipe我正在使用Swift。 在我的keyboardWillShow方法中,我写了以下内容:

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

奇怪的是,keyboardWillShow第一次被调用,heightValue是216.0,但是在随后的调用中它变成了0! 也许这是一个Xcode错误。

我用UIKeyboardFrameEndUserInfoKeyreplace了UIKeyboardFrameBeginUserInfoKey,并为我解决了这个问题。