当UIWebView的宽度小于窗口宽度时,UIWebView中的网页无法正确自动调整大小

时间:2011-04-08 11:35:54

标签: iphone cocoa-touch ipad

我做了一个简单的测试项目,在UIView上只有一个UIWebView填充窗口。当UIWebView的宽度与UIView相同时,一切都运行良好。当UIWebView的宽度小于容器的宽度时,水平滚动条会不规则地出现。我加载的网页是一个本地html文件。未设置宽度,因此它应符合浏览器/ UIWebView的宽度。

请帮忙。感谢。

The iPad simulator.

4 个答案:

答案 0 :(得分:8)

方法1. webView.scalePageToFit = YES,但当webView的宽度发生变化时,网页的字体大小会相应改变,为了解决这个问题,你可以尝试方法2:

方法2.在Objective-C代码中动态设置webView的宽度,以便 当UIWebView的宽度发生变化时,通过调用javascript脚本来更改HTML网页的宽度。

int webViewWidth = isPortraitOrLandscape ? 768:1024; // the dynamic width of the webView
NSString *javascript = [NSString stringWithFormat:@"document.getElementsByTagName('body')[0].style.width = '%dpx'", webViewWidth];
[webView stringByEvaluatingJavaScriptFromString:javascript];

通过这样做,webView的宽度可以与实际的HTML网页匹配。

答案 1 :(得分:4)

上述解决方案对我来说并非相当。问题是要将文本换行到适当的浏览器视图大小,而不是缩小内容,也不允许滚动。

我的修复是通过执行一些偷偷摸摸的javascript来强制视口进入html:

javascript = [NSString stringWithFormat:@"var viewPortTag=document.createElement('meta');  \
              viewPortTag.id='viewport';  \
              viewPortTag.name = 'viewport';  \
              viewPortTag.content = 'width=%d; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;';  \
              document.getElementsByTagName('head')[0].appendChild(viewPortTag);" , (int)authWebView.bounds.size.width];

[authWebView stringByEvaluatingJavaScriptFromString:javascript];

根据您可能需要或可能不需要的其他视口设置,或者您的网页已经有指定视口的元标记,您的milage可能会有所不同。

javascript的想法来自这个答案:How to insert metatag without using jquery append?

答案 2 :(得分:1)

您可以在<head>中添加元标记,为视口设置明确的宽度:

<meta name = "viewport" content = "width = 590">

请参阅Safari Web Content Guide

答案 3 :(得分:0)

Tyr进行网页浏览模式缩放以填充。