ios - iPad OS 是否可以检测键盘是否处于浮动模式?
问题描述
我们遇到了一个特定的错误,iOS/iPadOS
当 iPad 在屏幕上显示浮动(类似 iPhone)键盘(而不是锚定键盘)时,似乎会触发该错误
我们的问题特定于 React Native 和KeyboardAvoidingView
组件。当组件渲染并且键盘浮动时,KeyboardAvoidingView
完全错误地计算了键盘所需的高度并隐藏了大约 95% 的屏幕高度。
它KeyboardAvoidingView
本身似乎没有办法检测浮动键盘是否打开。
是否可以利用特定的 API 来检测这种键盘模式,以便我们可以关闭KeyboardAvoidingView
它?
键盘事件(keyboardWillShow
,keyboardDidShow
等)似乎没有返回任何特定的线索。
解决方案
没有这样的模式枚举/指示符(至少现在是这样),但有键盘框架信息
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)
推荐阅读
- python - 为什么即使安装了 FBX 模块也找不到?
- cors - 如何在 Cloud Foundry Staticfile Buildpack 中配置 CORS 策略以添加缺少的“Access-Control-Allow-Origin”标头
- c# - 无法将当前 JSON 对象(例如 {"name":"value"})反序列化为 List 类型 Collection
- monaco-editor - 带有原生 ECMAScript 模块导入的 monaco-editor
- windows - 如何跳过 PostgreSQL 寻呼机中的“-- More --”?
- android - Android 无法在 Android Q 10 上获取 IMEI
- c# - 如何使 DataGrid 列水平对齐拉伸和自定义列名 - UWP DataGrid
- vba - 如何选择最后一个活动单元格?
- java - 无法启动 Spring Boot 应用程序
- javascript - 客户端发布响应中的 jQuery 错误 - POST HTTP/1.1" 400