【发布时间】:2013-08-15 18:38:57
【问题描述】:
我知道如何设置一个 NSNotification 观察者来检测键盘何时显示/隐藏。由此我可以得到键盘的高度。但是如果设备在键盘仍然显示时旋转会发生什么?
有没有办法在这种新状态下获得键盘的高度?由于键盘仍然显示新的通知不会被触发。
【问题讨论】:
我知道如何设置一个 NSNotification 观察者来检测键盘何时显示/隐藏。由此我可以得到键盘的高度。但是如果设备在键盘仍然显示时旋转会发生什么?
有没有办法在这种新状态下获得键盘的高度?由于键盘仍然显示新的通知不会被触发。
【问题讨论】:
你仍然必须使用 NSNotificationCenter,但你必须观察一个不同的键。您要查找的键是 UIKeyboardDidChangeFrameNotification,根据文档,它会在键盘框架发生更改后立即发布。
【讨论】:
在 iOS 6+ 上,如果您已注册接收 UIKeyboardDidShowNotification,则当方向更改时将再次调用您的选择器。
这是 Apple 在他们的 Managing the Keyboard 的示例代码中使用的通知,但是,当使用此通知时,他们在横向模式下计算键盘高度时的计算是错误的:
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 不会在设备旋转时被调用,这就是我必须发布这个问题的原因。