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对象的关键字,用于标识屏幕坐标中键盘的结束帧。
尝试这个:
用UIKeyboardFrameBeginUserInfoKey
replaceUIKeyboardFrameEndUserInfoKey
我有一个类似的问题使用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,并为我解决了这个问题。