【问题标题】:Is is possible on iPad OS to detect if the keyboard is in floating mode?iPad OS 是否可以检测键盘是否处于浮动模式?
【发布时间】:2020-05-09 07:11:43
【问题描述】:

我们在iOS/iPadOS 上遇到了一个特定错误,这似乎是当 iPad 在屏幕上显示浮动(类似 iPhone)键盘(而不是锚定键盘)时触发的

我们的问题特定于 React Native 和 KeyboardAvoidingView 组件。当组件渲染并且键盘浮动时,KeyboardAvoidingView 完全错误地计算了键盘所需的高度,而是隐藏了大约 95% 的屏幕高度。

KeyboardAvoidingView 本身似乎没有办法检测浮动键盘是否打开。

是否可以利用特定的 API 来检测此键盘模式,以便我们可以为此关闭 KeyboardAvoidingView

键盘事件(keyboardWillShowkeyboardDidShow 等)似乎没有返回任何具体线索。

【问题讨论】:

    标签: ios objective-c react-native ipad react-native-ios


    【解决方案1】:

    没有这样的模式枚举/指示符(至少现在是这样),但有键盘框架信息

    public class let keyboardFrameBeginUserInfoKey: String // NSValue of CGRect
    public class let keyboardFrameEndUserInfoKey: String // NSValue of CGRect
    

    在相应的键盘通知中

    public class let keyboardWillShowNotification: NSNotification.Name
    
    public class let keyboardDidShowNotification: NSNotification.Name
    
    public class let keyboardWillHideNotification: NSNotification.Name
    
    public class let keyboardDidHideNotification: NSNotification.Name
    
    public class let keyboardWillChangeFrameNotification: NSNotification.Name
    
    public class let keyboardDidChangeFrameNotification: NSNotification.Name
    

    相对于屏幕边界

    UIScreen.main.bounds
    

    可以检测键盘边框是在屏幕底部边缘还是浮动。

    大概是这样的

    keyboardAttached = NSMaxX(screenBounds) == NSMaxX(keyboardFrame) &&
        NSMaxY(screenBounds) == NSMaxY(keyboardFrame) && 
        NSWidth(screenBounds) == NSWidth(keyboardFrame)
    

    【讨论】:

    • 感谢您对此的回答。我们确实考虑过检查键盘尺寸,但这似乎不是一个可靠的解决方案。我们会试一试。
    • @Ben 到目前为止,我认为你们应该使用上述方法并继续前进,直到出现另一个更好的解决方案。
    【解决方案2】:

    我宁愿检查键盘的宽度。

    当键盘的边框宽度等于屏幕的边界宽度时,则表示键盘未处于浮动模式。

    【讨论】:

    • 不正确,即使在 iPad 上使用 iOS 13,当键盘全宽但未停靠时,您也会获得“未停靠”选项
    猜你喜欢
    • 2014-10-02
    • 1970-01-01
    • 2011-08-25
    • 2011-11-24
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多