过渡到iOS 7:在iPad上查看的jQuery / iPhone Webapps的正确视口设置

时间:2013-09-19 10:42:18

标签: ios ipad jquery-mobile uiwebview ios7

我们有一个基本上有一个UIWebView的应用程序,在XCode中设置为“iPhone App”。

直到现在一切正常,但是使用iOS 7 iPad模拟器,应用程序现在立即显示在“全屏”中,这不是问题,但WebView也似乎放大了。

我只看到加载网站的右上角1/4,必须滚动查看其余部分。

我们在应用程序中使用jQuery mobile 1.3.1。

修改

我发现了错误。看来,视口元元素的语义在iOS版本之间发生了变化。

更改

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

<meta name="viewport" content="initial-scale=1">

为我工作,但我不确定这是否可行,因为jQuery Mobile Demo Page确实将设置为设备。当我从UIWebView加载Demo-Page时,我得到了同样的效果。

是否有关于“正确方法”设置视口的信息,特别是因为演示页使用的是width = device-width

5 个答案:

答案 0 :(得分:12)

在iOS 7上,它已经改变了解释vieport元标记的方式。 您可以在此处找到解释https://developer.apple.com/library/ios/releasenotes/General/RN-iOSSDK-7.0/#//apple_ref/doc/uid/TP40013202-CH1-SW75

  

以前,修改视口参数时,旧参数永远不会被丢弃。   这导致视口参数是累加的。

     

例如,如果您以width = device-width开始,然后更改   它初始比例= 1.0,你最终得到了一个计算视口   width = device-width,initial-scale = 1.0。

     

在iOS 7中,已经解决了这个问题。现在你最终得到了一个计算机   初始比例的视口= 1.0。

现在的问题是:这将如何影响iOS6上的布局&lt;在Android设备上?

答案 1 :(得分:4)

我有一个只会在iOS7 iPad上“破解”的iPhone应用程序。从视口元标记中删除“width = device-width”会修复它。

答案 2 :(得分:1)

我使用了你的答案,但它并没有解决我的所有问题。 初始尺寸仍然是ipad的宽度而不是iphone的。

此外,当我尝试在文本上书写时,屏幕缩放本身就会填充文本框,只有当我按下完成后,屏幕才会重新调整大小到适当的iphone大小。

我仍然需要一个合适的解决方案。

答案 3 :(得分:1)

我的答案是最好的,你可以尝试一下,应该兼容ios5 / ios6 / ios7包括android

代码:

<meta content="width=device-width; initial-scale=1.0; minimum-scale=1.0; maximum-scale=2.0" name="viewport" />

iOS7 uiwebview可能想要更改高度:

代码:

float version = [[[UIDevice currentDevice] systemVersion] floatValue];

self.webView = [[UIWebView alloc]init];
if (version >= 7.0)
{
    self.webView.frame=CGRectMake(0, 0, rect.size.width, rect.size.height);
}
else
{
    self.webView.frame=CGRectMake(0, 0, rect.size.width, rect.size.height-20);
}

答案 4 :(得分:1)

我遇到了与手机带相同的问题,删除设备宽度并没有解决我的问题。

我不得不修改Classes / MainViewController.m

我修改了:

- (void)webViewDidFinishLoad:(UIWebView*)theWebView
{
    // Black base color for background matches the native apps
    theWebView.backgroundColor = [UIColor blackColor];

    return [super webViewDidFinishLoad:theWebView];
}

成为:

- (void)webViewDidFinishLoad:(UIWebView*)theWebView {

    theWebView.backgroundColor = [UIColor blackColor];

    float version = [[[UIDevice currentDevice] systemVersion] floatValue];

    if (version >= 7.0)
    {

        [self.webView stringByEvaluatingJavaScriptFromString:@"$('meta[name=viewport]').attr('content','width=device-width, initial-scale=.42 user-scalable=no');$('body').animate({'opacity':1},300)"];
    }

    return [super webViewDidFinishLoad:theWebView];
}

*更新*

- (void)webViewDidFinishLoad:(UIWebView*)theWebView
{
    // Black base color for background matches the native apps
    theWebView.backgroundColor = [UIColor blackColor];


    // iPhone app zoom on iPad with iOS 7 fix

    float version = [[[UIDevice currentDevice] systemVersion] floatValue];

    if (version >= 7.0)
    {

        [self.webView stringByEvaluatingJavaScriptFromString:@"if(!(navigator.userAgent.match(/iPhone/i)) && !(navigator.userAgent.match(/iPod/i))) {$('meta[name=viewport]').attr('content','width=device-width, initial-scale=.42 user-scalable=no');}"];
    }

    [self.webView stringByEvaluatingJavaScriptFromString:@"$('body').animate({'opacity':1},300)"];

    return [super webViewDidFinishLoad:theWebView];
}

我将if语句之外的代码淡入淡出为&lt; iOS7将保持不透明度0,否则

* END UPDATE *

我使用“version”变量和if语句来定位iOS 7.感谢@leetvin

然后缩小比例放大

最初在放大视图和缩小视图之间有一个跳转,所以我在css中将body的不透明度设置为0,在调整大小后设置为animated / faded in