【问题标题】:UIWebView auto rotation corrupts web view content (screenshots inside)UIWebView 自动旋转会破坏 Web 视图内容(内部截图)
【发布时间】:2011-07-18 09:36:58
【问题描述】:

我遇到了 UIWebView 自动旋转的问题。
网络视图正常,但内容不行。
正如您在底部屏幕截图中看到的那样,有一个黑色边距,我知道这是 web 视图,因为我可以在滚动时看到滚动条。

视图控制器有:

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

webview 具有完全自动调整大小的掩码,并且该视图是自动调整子视图的大小。

我尝试了 stackoverflow 和 google 的一系列技巧,但都没有奏效。
这只发生在某些网站上,但如果我在移动 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

谢谢!

【问题讨论】:

  • 您能否添加与 webview 相关的代码?你如何创建和放置?
  • 你能提供一个这样的网站的地址吗?
  • 有问题的网站示例:m.calcalist.co.il

标签: iphone ios cocoa-touch uiwebview rotation


【解决方案1】:

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

你也可以设置UIWebView的这个属性:

webView.autoResizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;

【讨论】:

  • 这个解决方案对我有用。不是选择的答案
  • 是的,这可行,但代码中有一个错误:autoResizingMask => autoresizingMask,'R' 没有大写。
【解决方案2】:

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

如果您是自己生成 HTML,那么您也可以设置 viewport 元标记。

如果页面已经设置了视口,你可以将你的 viewcontroller 设置为 web view 的代理,并像这样改变它:

- (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;"];
}

【讨论】:

  • 您提到的站点 (m.calcalist.co.il) 的视口宽度设置为 320,因此不会比这更宽。错误的是页面设计,而不是您的实现。
  • 更新了我的答案以展示如何摆脱限制性视口。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多