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

15

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

在这种新状态下有没有一种方法可以获得键盘的高度?由于键盘仍然显示,新的通知不会被触发。

2个回答

13

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


1
谢谢!这很有道理。它在 KeyboardDidShow 和 KeyboardDidHide 通知之后都会被调用。 - Steve Barden

5
在iOS 6及以上版本中,如果您已注册接收UIKeyboardDidShowNotification通知,则当屏幕方向改变时,会再次调用您的选择器。
这是苹果在其管理键盘示例代码中使用的通知,但是,在使用此通知时,在横向模式下计算键盘高度时,他们的计算方法是错误的。
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 - memmons
我可以证实 UIKeyboardDidShowNotification 在设备旋转时不会被调用,这就是为什么我不得不发布这个问题的原因。 - Steve Barden
@SteveBarden,显然这只适用于iOS 6+。我更新了我的答案。 - Marcus Adams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接