我们在iOS/iPadOS上遇到了一个特定的错误,似乎是在iPad在屏幕上显示浮动(类似于iPhone的)键盘(而不是固定的键盘)时触发的
我们的问题特定于React Native和KeyboardAvoidingView组件。当组件渲染并且键盘悬空时,KeyboardAvoidingView完全错误地计算了键盘所需的高度,而隐藏了屏幕高度的约95%。
KeyboardAvoidingView本身似乎无法检测浮动键盘是否打开。
是否可以使用特定的API来检测此键盘模式,以便我们可以关闭KeyboardAvoidingView?
键盘事件(keyboardWillShow,keyboardDidShow等)似乎没有返回任何特定的线索。
最佳答案
- 没有这样的模式枚举/指示符(至少目前是这样),但是具有键盘框架信息
- 是通过键盘宽度是否可以改变可以进行判断是否为悬浮键盘
- 根据键盘宽度的改变 是否为悬浮键盘
if (rect.size.width == UIScreen.mainScreen.bounds.size.width) {
[UIView animateWithDuration:time animations:^{
if (Y > 0) {
// 键盘弹出的时候禁止开启抽屉
self.navigationItem.leftBarButtonItem.enabled = NO;
self.sendMessageTableView.frame = CGRectMake(0, CYSafeAreaTopHeight, SCREEN_WIDTH, SCREEN_HEIGHT - self.chatToolView.height - Y - CYSafeAreaTopHeight);
self.chatToolView.frame = CGRectMake(0, self.sendMessageTableView.maxY, SCREEN_WIDTH, self.chatToolView.height);
} else {
self.navigationItem.leftBarButtonItem.enabled = YES;
self.sendMessageTableView.frame = CGRectMake(0, CYSafeAreaTopHeight, SCREEN_WIDTH, SCREEN_HEIGHT - self.chatToolView.height - Y - CYSafeAreaTopHeight);
self.chatToolView.frame = CGRectMake(0, self.sendMessageTableView.maxY, SCREEN_WIDTH, self.chatToolView.height);
}
self.autoCompletionView.maxY = self.chatToolView.y;
[self scrollPositionBottom];
}];
} else {
// 添加iPad 悬浮键盘适配
self.navigationItem.leftBarButtonItem.enabled = YES;
self.sendMessageTableView.frame = CGRectMake(0, CYSafeAreaTopHeight, SCREEN_WIDTH, SCREEN_HEIGHT - self.chatToolView.height - CYSafeAreaTopHeight);
self.chatToolView.frame = CGRectMake(0, self.sendMessageTableView.maxY, SCREEN_WIDTH, self.chatToolView.height);
self.autoCompletionView.maxY = self.chatToolView.y;
[self scrollPositionBottom];
}
-
demo