Phonegap KeyboardShrinksView和固定在iOS上的位置未正确应用

时间:2013-11-26 17:12:25

标签: ios cordova webview keyboard

我使用2.9.0版本的Phonegap,我希望当键盘出现时,我的WebView缩小就像在Android phonegap应用程序中完成的那样。我将页脚和页眉元素固定在固定位置,当键盘打开时会导致故障(页脚和页眉松开其固定位置状态)。

根据phonegap文档,我认为KeyboardShrinksView设置可以解决这个问题:http://docs.phonegap.com/en/2.9.0rc1/guide_project-settings_ios_index.md.html#Project%20Settings%20for%20iOS

但经过大量的尝试,我无法使其工作,WebView不会缩小。

我想也许它可能来自我在config.xml上设置的其他偏好之间的冲突:

config.xml

<gap:platform name="ios" />
<gap:platform name="android" />

<preference name="fullscreen" value="false" />
<preference name="webviewbounce" value="false" />
<preference name="orientation" value="portrait" />
<preference name="KeyboardShrinksView" value="true" />

或许它可能来自元标记定义,特别是视口:

的index.html

<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height" /> 

你知道它为什么不起作用吗?或者你有解决方法吗?

编辑:我看到当KeyboardShrinksView = true时它会改变一些东西,但是当键盘打开时,它会隐藏我的内容的底部(包括我的页脚和字段)而不是调整整个内容的大小。我希望它将我的页脚放在键盘的顶部,我是对的吗?

感谢您的帮助

2 个答案:

答案 0 :(得分:4)

是的 - 现在处理这个问题真是太痛苦了。目前还没有真正的解决方案来制作像以前一样的iOS。就个人而言,我目前在我的应用程序中处理两个不同的标签(一个用于iOS,一个用于Android),它接近iOS上的旧行为。这是我使用的:

<!-- IOS --> <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, maximum-scale=1.0, target-densityDpi=device-dpi" />`
<!-- ANDROID --> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=1" />

我的config.xml设置是您所期望的:

<preference name="HideKeyboardFormAccessoryBar" value="true" />
<preference name="KeyboardShrinksView" value="false" />

以下是一些链接,可以密切注意以保持Cordova人员最终修复它的窃听(即请求)。

希望这些链接至少可以帮助您了解与keyboardshrink相关问题的最新信息。如果其他人有此主管/链接,请分享!

答案 1 :(得分:0)

我通过在每次更改页面上调用此代码来修复它 - :

    $('input').unbind('focusout');
    $(document).on('focusout', 'input', function() {
        setTimeout(function() {
            window.scrollTo(document.body.scrollLeft, document.body.scrollTop);
        }, 500);
    });