HTML内容适合UIWebview而不缩小

我正在利用UIWebView来呈现一些HTML。 但是,虽然我的webview的宽度是320我的HTML仍然显示全宽,并可以水平滚动。

我希望实现本地邮件应用程序实现的同样的function,即在不缩小的情况下适合该宽度内的所有内容 – 本地邮件应用程序如何呈现HTML这样的内容?

更新

我认为使用视口元标记将有所帮助,但我无法得到这个工作。

这是发生了什么事情:

在这里输入图像描述

正如你所看到的内容不适合设备宽度。 我已经尝试了这么多的viewport meta标签的组合。 下面是我尝试Martinsbuild议时发生的事情的一个例子。

原始的HTML可以在这里find。

本地邮件应用程序呈现此HTML的方式就像这样

这是你做的:

在拥有Web视图的UI控制器中,使其成为UIWebViewDelegate 。 然后,在设置要加载的URL的位置,将代理设置为控制器:

 NSString *urlAddress = @"http://dl.dropbox.com/u/50941418/2-build.html"; NSURL *url = [NSURL URLWithString:urlAddress]; NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; [webView loadRequest:requestObj]; webView.delegate = self; 

最后实现webViewDidFinishLoad:正确设置缩放级别:

这个选项将适用于iOS 5.0和>

 - (void)webViewDidFinishLoad:(UIWebView *)theWebView { CGSize contentSize = theWebView.scrollView.contentSize; CGSize viewSize = theWebView.bounds.size; float rw = viewSize.width / contentSize.width; theWebView.scrollView.minimumZoomScale = rw; theWebView.scrollView.maximumZoomScale = rw; theWebView.scrollView.zoomScale = rw; } 

我希望这有帮助…

选项B,你可以尝试改变HTML(这个例子是做这个工作的,但从HTMLparsing的angular度来看并不完美),我只是想说明一下我的观点,它可以适用于你的例子,也可能是大多数情况。 40可能可以通过程序检测,我没有试图去研究。

 NSString *urlAddress = @"http://dl.dropbox.com/u/50941418/2-build.html"; NSURL *url = [NSURL URLWithString:urlAddress]; NSString *html = [NSString stringWithContentsOfURL:url encoding:[NSString defaultCStringEncoding] error:nil]; NSRange range = [html rangeOfString:@"<body"]; if(range.location != NSNotFound) { // Adjust style for mobile float inset = 40; NSString *style = [NSString stringWithFormat:@"<style>div {max-width: %fpx;}</style>", self.view.bounds.size.width - inset]; html = [NSString stringWithFormat:@"%@%@%@", [html substringToIndex:range.location], style, [html substringFromIndex:range.location]]; } [webView loadHTMLString:html baseURL:url]; 

只需添加这个:

 webView.scalesPageToFit = YES; 

我的工作是在界面生成器中selectUIWebView,并选中“缩放页面适合”框:

在这里输入图像描述

通常,您应该使用视口元标记。 但它的使用是非常不稳定的,主要是如果你想要一个跨平台的网页。

这也取决于你有什么内容和CSS。

对于我的iPhone主页,必须从肖像自动resize到lanscape,我使用这个:

 <meta name="viewport" content="width=device-width; minimum-scale=1.0; maximum-scale=1.0; user-scalable=no"> 

如果您需要特别resize,您也可以使用该事件:

 <body onorientationchange="updateOrientation();"> 

在你的javascript中有相应的function:

 function updateOrientation() { if(Math.abs(window.orientation)==90) // landscape else // portrait } 

编辑:

看到你的网页来源,似乎你是用网页编辑器做的,不是吗?

好的,我明白了。 你的主div有600px的宽度。 iphone的屏幕分辨率是320×480。 600> 320,因此超过了屏幕边界。

现在,让我们做一些简单的操作:

 320 / 600 = 0.53 480 / 600 = 0.8 

所以你想缩小0.5倍,最多0.8倍。 让我们改变视口:

 <meta name="viewport" content="width=device-width; minimum-scale=0.5; maximum-scale=0.8; user-scalable=no"> 

Swift 3:

使用此扩展来根据web视图的大小来调整webview的内容大小。

 extension UIWebView { ///Method to fit content of webview inside webview according to different screen size func resizeWebContent() { let contentSize = self.scrollView.contentSize let viewSize = self.bounds.size let zoomScale = viewSize.width/contentSize.width self.scrollView.minimumZoomScale = zoomScale self.scrollView.maximumZoomScale = zoomScale self.scrollView.zoomScale = zoomScale } } 

如何调用?

 webViewOutlet.resizeWebContent() 
 @implementation UIWebView (Resize) - (void)sizeViewPortToFitWidth { [self stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.querySelector('meta[name=\"viewport\"]').setAttribute('content', 'width=%d;', false); ", (int)self.frame.size.width]]; } @end