【发布时间】:2014-05-11 12:12:04
【问题描述】:
我已经为这个问题苦苦挣扎了一个多星期,如果我能得到任何帮助,我将不胜感激。我会按我的理解解释这个问题,但如果我说的不正确,请更正。
在 iOS 7.0.x 中,当键盘显示时,Web 视图会调整大小,因此键盘占用的区域不会被视为视口窗口大小的一部分。直到 7.0,Cordova 键盘插件处理了这个 web 视图的大小调整。由于 7.0 本机以所需的方式处理键盘显示,因此 config.xml 文件的键盘 shrinkView 选项在此提交时变为“无操作”:
https://github.com/apache/cordova-plugins/commit/20215013bf91b659b73d5f428ae91dd58be1273a
但是,在 7.1 中,键盘占据的区域会出现在 Web 视图之上。这有一个痛苦的副作用。假设您想在正文前加上一个 <div> 并带有一个文本区域(例如留下评论或聊天回复),即;
<body>
<div id="app">...</div>
<div id="reply">
<textarea></textarea>
</div>
</body>
示例 CSS:
body {
position: fixed;
top: 0;
bottom: 0;
right: 0;
left: 0;
overflow: hidden;
}
#reply {
position: absolute;
bottom: 0;
left: 0;
right: 0;
}
每当您聚焦或输入文本区域时,Web 视图都会原生地重新居中输入字段。由于 web 视图仍然会考虑整个屏幕的高度,因此 div 不会固定在底部,从而破坏了布局。
我尝试了以下方法:
使用 CSS 处理 body 和固定 div。位置固定/绝对似乎没有什么不同。为 body 设置一个明确的高度没有任何作用。
元视口选项的所有可能组合。这是我目前正在使用的:
<meta name="viewport" content="user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1, width=device-width, height=device-height, minimal-ui" />
取消注释 Cordova 键盘插件中的“No-op”。这仍然像在 iOS 7.0.x 中那样破坏布局。
在
input和focus事件上设置JS 事件侦听器以继续计算底部偏移量以使div 保持在底部。这非常令人兴奋,因为它与将输入字段居中的原生 Web 视图行为作斗争。在显示/隐藏键盘后更改元标记以设置显式高度。
我正在使用 Cordova 3.4.0-0.1.3
还有其他人遇到过这个问题吗?有什么解决方案或想法吗?
【问题讨论】:
-
您如何找到解决此问题的方法?
标签: javascript html ios css cordova