iOS:有时键盘会推起整个 qml 页面

Дми*_*син 6 keyboard qt qml ios

我正在开发一个跨平台的 QML QtQuick 应用程序。一个窗口是带有标题、消息区域和文本编辑输入的典型聊天窗口。在 iOS(在模拟器和真实设备中)上,我遇到了虚拟键盘的问题,该键盘将文本编辑以及整个窗口向上“移动”,并且不允许看到标题。

这是应用程序窗口的屏幕截图:https : //drive.google.com/file/d/0B6ZI4g3F2MLOSXB2RjBDbGNEWEk

同样的问题已经在 Qt 错误跟踪器中注册。但是没有解决办法。而且,论坛上也有过类似的问题,都没有答案。

关于解决方案或解决方法的任何想法?

mkr*_*rus 2

我过去曾实施过解决方法,但确实存在问题。

避免使用键盘是一种痛苦,而且 Qt 滚动整个屏幕的统一方法并不理想(特别是当它有问题且难以禁用时),导致导航栏移出屏幕等。

基本上,我的解决方法是:

  • 添加 aMouseArea作为 的子项TextField,这会停止设置焦点并启动默认滚动行为
  • onClick该处理程序中MouseArea,移动该字段,使其不在键盘出现的区域下方。这可以使用状态和行为动画来完成
  • 当动画停止时,显式地将焦点设置到文本字段,这将导致键盘出现(但屏幕不会滚动,因为您已将焦点元素移开)

让事物完美地呈现动画可能是一件痛苦的事情。此外,您可以在某种程度上对键盘的大小进行硬编码,但需要借助 ObjC 来获取实际的键盘高度(并通过某些属性将其公开给 QML)。

另一方面,即键盘关闭,也可能是一种痛苦。需要处理文本字段失去焦点、用户点击空白区域、用户点击关闭键(在 iPad 上)等问题。结账Qt.inputmethod

Qt 辩称,避免键盘很难做到,需要了解应用程序布局才能获得最佳结果。这就是为什么 UIKit 实际上根本不处理它(除非它知道滚动什么以及滚动多少,例如表格)。