15

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

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

4

2 回答 2

13

您仍然必须使用 NSNotificationCenter,但您必须观察不同的密钥。您正在寻找的关键是UIKeyboardDidChangeFrameNotification根据文档,它会在键盘框架发生更改后立即发布。

于 2013-08-15T18:43:58.353 回答
5

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;
于 2013-08-15T19:09:25.137 回答