首页 > 解决方案 > iPad OS 是否可以检测键盘是否处于浮动模式?

问题描述

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

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

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

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

键盘事件(keyboardWillShow,keyboardDidShow等)似乎没有返回任何特定的线索。

标签: iosobjective-creact-nativeipadreact-native-ios

解决方案


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

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)

推荐阅读