我知道如何设置一个 NSNotification 观察者来检测键盘何时显示/隐藏。由此我可以得到键盘的高度。但是如果设备在键盘仍然显示时旋转会发生什么?
有没有办法在这种新状态下获得键盘的高度?由于键盘仍在显示新通知,因此不会触发。
您仍然必须使用 NSNotificationCenter,但您必须观察不同的密钥。您正在寻找的关键是UIKeyboardDidChangeFrameNotification根据文档,它会在键盘框架发生更改后立即发布。
在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;