3

我将出色的英特尔 AppFramework 用于我的 phonegap / cordova 应用程序的 UI,但是从 iOS7 开始,有时,当我打开键盘时,底部菜单会上升(它不应该): http ://screencloud.net/v/9omt 然后,当我关闭键盘时,底部菜单停留在屏幕中间: http ://screencloud.net/v/DgRf

看起来该错误在 hideAddressBar 函数中。我禁用了该功能,现在,菜单总是会出现,但至少,当我关闭键盘时它总是会完成。

(我们使用的是 1.0 版本。我们计划很快更新,但我们正在紧急发布中)

提前感谢您的任何帮助或指示,

4

3 回答 3

9

这个解决方案对我有用。我的 index.html 中有以下元标记:

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

我把它改成这样:

<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, maximum-scale=1.0, target-densityDpi=device-dpi" />

最重要的属性是height=device-height,它表示视图大小将始终是设备的大小。

编辑:iPad 在横向和 iOS7 中存在错误。视口的 CSS 大小是错误的...

于 2013-09-24T18:38:28.670 回答
0

虽然塞缪尔的回应应该解决问题,但它会产生其他副作用。例如,在 Phonegap 3.3 中,将height=device-height添加到视口,您将在每个屏幕中滚动(即使页面上的元素不够大而无法填满屏幕)。在我们的案例中,在这里找到的唯一解决方案是将通知处理程序添加到 Phonegap 上的打开键盘,它调用 javascript 函数,然后在此函数上隐藏固定页脚,除了在焦点/模糊功能中再次隐藏/显示页脚. 附加了一个使用 jquery mobile 的示例,但您可以更新它以使用不同的框架:

在 JavaScript 上:

  $(document).on('focus','input, select, textarea',function() {
    if( device.platform=== 'iOS' && parseInt(device.version.substring(0,1)) >= 7){
        if($(this).attr('readonly')===undefined){
            $("[data-role=footer]").hide();
        }
    }  
  });

  $(document).on('blur','input, select, textarea',function(){
    if( device.platform=== 'iOS' && parseInt(device.version.substring(0,1)) >= 7){
        if($(this).attr('readonly')===undefined){
            $("[data-role=footer]").show();
        }
    }
    setTimeout(function() {
        window.scrollTo(document.body.scrollLeft, document.body.scrollTop);
    }, 0);
  });

  function hideFooter(){
    if( device.platform=== 'iOS' && parseInt(device.version.substring(0,1)) >= 7){
        if($(this).attr('readonly')===undefined) {
            $("[data-role=footer]").hide();
        }
    }
  }

在 phonegap MainViewController.m 中:

- (id)init
{
    self = [super init];
    if (self) {
        // Uncomment to override the CDVCommandDelegateImpl used
        // _commandDelegate = [[MainCommandDelegate alloc] initWithViewController:self];
        // Uncomment to override the CDVCommandQueue used
        // _commandQueue = [[MainCommandQueue alloc] initWithViewController:self];
        }

    //fix for ios7 footer is scrolled up when the keyboard popsup.
    [[NSNotificationCenter defaultCenter] addObserver:self
        selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];

    return self;
}

-(void)keyboardWillShow:(NSNotification*)notification{
    if (IsAtLeastiOSVersion(@"7.0")){
        [self.webView stringByEvaluatingJavaScriptFromString:@"hideFooter()"];
    }
}
于 2014-03-25T18:33:46.427 回答
0

我和你在同一条船上,并试图找出一个可行的解决方案。我正在与这里的主要 ios phoengap 贡献者之一合作:https ://issues.apache.org/jira/browse/CB-3020

他发布了一个更新的解决方案,3.1 应该很快就会出现补丁修复。

我仍然遇到一些问题,并且底部的黑条随机显示在某些页面上。

前往 cordova jira 站点并添加您的测试详细信息以提供帮助。

谢谢!

于 2013-09-23T20:38:13.517 回答