【发布时间】:2013-10-15 14:52:22
【问题描述】:
我正在使用 Worklight 6.0.0.1 企业版并更新现有应用程序以使用 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>
我非常感谢任何朝着正确方向提出的建议或点头。
谢谢, 克里斯
【问题讨论】:
-
我们遇到了这个问题,只是键盘向上推了我们的标签栏并挡住了我们的字段。我们现在解决这个问题的方法是使用 xcode4.6 和 iphone 6 sdk 进行编译
-
你试过没有 Dojo 吗?
-
另外,这里的最佳答案对您有帮助吗:stackoverflow.com/questions/18970865/…
-
我已经在没有 Dojo 的情况下尝试过,是的,在上面的简单示例中,它确实可以正常工作。默认情况下,带有内置 Dojo 库的新 Worklight 项目使用 ScrollableView 围绕正文中的内容,一旦完成,一切都会中断。它似乎肯定是相关的,但我不认为结论应该是如果您使用的是 iOS 7,Worklight 不支持 Dojo ......关于您链接到的问题的答案,不,它没有不幸的是,帮助。我以前试过。
-
据我所见,Dojo Mobile ScrollableView 无法在没有 Dojo 的情况下工作的原因是 Dojo 依赖焦点事件来更新滚动位置。因此,在录制字段时缺少自动滚动将是缺少焦点事件的副作用(请参阅issues.apache.org/jira/browse/CB-5115)。
标签: dojo keyboard ios7 ibm-mobilefirst dojox.mobile