Ios 如何在不依赖通知的情况下获取键盘高度

Ios 如何在不依赖通知的情况下获取键盘高度,ios,ipad,Ios,Ipad,我知道如何设置NSNotification observer来检测键盘何时显示/隐藏。从这个我可以得到键盘的高度。但是,如果在键盘仍然显示的情况下旋转设备会发生什么 有没有办法在这种新状态下获得键盘的高度?由于键盘仍在显示,因此不会触发新通知。您仍然必须使用NSNotificationCenter,但必须观察不同的键。根据文档,您要查找的键是在键盘框架发生更改后立即发布的键。在iOS 6+上,如果您已注册接收UIKeyboardDidShowNotification,当方向发生更改时,将再次调用

我知道如何设置NSNotification observer来检测键盘何时显示/隐藏。从这个我可以得到键盘的高度。但是,如果在键盘仍然显示的情况下旋转设备会发生什么


有没有办法在这种新状态下获得键盘的高度?由于键盘仍在显示,因此不会触发新通知。

您仍然必须使用NSNotificationCenter,但必须观察不同的键。根据文档,您要查找的键是在键盘框架发生更改后立即发布的键。

在iOS 6+上,如果您已注册接收
UIKeyboardDidShowNotification
,当方向发生更改时,将再次调用您的选择器

这是Apple在其示例代码中使用的通知,但是,当使用此通知时,在横向模式下计算键盘高度时,他们的计算是错误的:

CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
将上述内容替换为:

// Works in both portrait and landscape mode
CGRect kbRect = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
kbRect = [self.view convertRect:kbRect toView:nil];

CGSize kbSize = kbRect.size;

如果键盘已经显示,则旋转时不会调用
UIKeyboardDidShowNotification
。我可以证明设备旋转时不会调用
UIKeyboardDidShowNotification
,这就是我必须发布此问题的原因。@SteveBarden,显然这仅在iOS 6+上是正确的。我更新了我的答案。谢谢!这是有道理的。它在KeyboardDidShow和KeyboardDidHide通知之后被调用。