我正在使用 Worklight 6.0.0.1 Enterprise Edition 并更新现有应用程序以使用 iOS7。该应用程序建立在 Dojo 之上,特别是使用了 dojox/app 框架。
一个问题给我带来了很大的困难,即键盘。在我们的应用程序中,一些视图具有输入文本字段。在 iOS 的早期版本中,当用户单击文本字段时,视图会向上滚动以显示在用户键入时处于焦点的输入。
在 iOS 7 中,键盘只出现在屏幕上。视图不会向上滚动,如果输入字段朝向屏幕底部,则会被键盘覆盖。更糟糕的是,如果键盘覆盖了一个字段,它就会失去焦点,这意味着屏幕底部附近的所有字段都无法被操作。我发现的一种解决方法是在元标记中设置高度:
<meta content="height=device-height, width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport">
在我更改为设备上的横向方向之前,这很好用。当我以纵向模式打开和关闭键盘时,屏幕不会重新调整回正确的大小,并且 dojox/mobile/ScrollableView(包含所有内容)仍然向上推。键盘所在的下方有一个空白面板。
考虑到这可能与我们的应用程序有关,我尝试使用新的 Worklight 应用程序进行测试。我创建了一个新项目,并在主 HTML 文件的正文中添加了一些文本,并在底部添加了一个输入文本字段。结果与上述情况类似。在这种情况下,视图被向上推,包含内容的 dojox/mobile/ScrollableView 被推得太远。可滚动视图和键盘之间有一个空白面板。
我见过许多与键盘和滚动相关的线程,包括在 config.xml 中配置设置的建议:KeyboardShrinksView、HideKeyboardFormAcccessoryBar 和 DisallowOverscroll。这些都没有解决问题。
不幸的是,我无法发布屏幕截图来准确地向您展示我所看到的(没有足够的声誉点),但这是我上面提到的非常简单的测试应用程序的主体:
<body id="content" style="display: none;">
<div data-dojo-props="selected:true" data-dojo-type="dojox.mobile.ScrollableView" id="view0">
<!--application UI goes here-->
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
<br />
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
<br />
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
<br />
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
<br />
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
<br />
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
<br />
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
<br />
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
<br />
<input data-dojo-type="dojox/mobile/TextBox"></input>
</div>
<script src="js/initOptions.js"></script>
<script src="js/KeyboardTest.js"></script>
<script src="js/messages.js"></script>
</body>
我将不胜感激任何朝着正确方向提出的建议或点头。
谢谢,克里斯