UIWebView自动旋转会破坏Web视图内容(内部屏幕截图)

时间:2011-07-18 09:36:59

标签: iphone ios cocoa-touch uiwebview rotation

我遇到了UIWebView自动旋转的问题 网络视图结构不错,但内容不是。
你可以在底部的截图中看到有一个黑色边缘,我知道它是webview,因为我可以在滚动时看到滚动条。

视图控制器具有:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{
    return YES;
}

webview具有完全自动调整大小的掩码,视图会自动调整子视图的大小。

我尝试了一堆来自stackoverflow和谷歌的技巧,但没有一个能奏效 这种情况只发生在一些网站上,但如果我在移动版Safari甚至ios opera浏览器中打开有问题的网站,它会正确旋转。

编辑:有问题网站的示例: http://m.calcalist.co.il

webview在界面构建器中设置并使用以下代码加载:

[_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://m.calcalist.co.il"]]];

scalesPageToFit = YES; // doesn't help

谢谢!

before rotation

after rotation

2 个答案:

答案 0 :(得分:3)

willAnimateRotationToInterfaceOrientation中设置框架,然后设置元标记。

您也可以设置UIWebView的此属性:

webView.autoResizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;

答案 1 :(得分:2)

您可以将网络视图的scalesPageToFit属性设置为YES

如果您自己生成HTML,则还可以设置viewport元标记。

如果页面已经设置了视口,您可以将viewcontroller设置为Web视图的委托,并将其更改为:

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

    NSString *javaScript = @"var metatags = document.getElementsByTagName('meta'); \
    for(cnt = 0; cnt < metatags.length; cnt++) { \
        var element = metatags[cnt]; \
        if(element.getAttribute('name') == 'viewport') { \
            element.setAttribute('content','width = device-width; user-scalable = yes'); \
        } \
    }";
    [webView stringByEvaluatingJavaScriptFromString:javaScript];
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {

    if ([self interfaceOrientation] == UIInterfaceOrientationPortrait)
        [webView stringByEvaluatingJavaScriptFromString:@"document.body.style.zoom = 1.0;"];
    else
        [webView stringByEvaluatingJavaScriptFromString:@"document.body.style.zoom = 1.5;"];
}