【问题标题】:How to get keyboard height WITHOUT relying on notifications如何在不依赖通知的情况下获得键盘高度
【发布时间】:2013-08-15 18:38:57
【问题描述】:

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

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

【问题讨论】:

    标签: ios ipad


    【解决方案1】:

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

    【讨论】:

    • 谢谢!这是有道理的。它在 KeyboardDidShow KeyboardDidHide 通知之后被调用。
    【解决方案2】:

    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 不会在设备旋转时被调用,这就是我必须发布这个问题的原因。
    • @SteveBarden,显然这只适用于 iOS 6+。我更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    相关资源
    最近更新 更多