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