UIWebView – 加载外部网站,以编程方式设置初始缩放比例,然后允许用户缩放

是否有可能做到以上所有? SO给了我一个很好的方法来设置这里的初始缩放比例。 即,要在我的webViewDidFinishLoad方法中包含以下行:

[webView stringByEvaluatingJavaScriptFromString: @"document.body.style.zoom = 5.0;"]; 

但是我仍然不能做的是允许用户在程序初始化之后改变缩放比例。 如果我将scalePagesToFit设置为NO,则用户不能更改缩放比例。 如果我将scalePagesToFit设置为YES,它将覆盖我的编程缩放。

谁能帮忙?

编辑:谢谢你的回应。 但是,如果我缩放scrollView,事情模糊一点。

您可以添加或修改<meta name='viewport'标签来实现这一点。 这里的meta / viewport标签上的苹果文档:

https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/MetaTags.html

下面是加载文档后添加标签的示例:

 - (void) webViewDidFinishLoad:(UIWebView *)webView { NSString* js = @"var meta = document.createElement('meta'); " \ "meta.setAttribute( 'name', 'viewport' ); " \ "meta.setAttribute( 'content', 'width = device-width, initial-scale = 5.0, user-scalable = yes' ); " \ "document.getElementsByTagName('head')[0].appendChild(meta)"; [webView stringByEvaluatingJavaScriptFromString: js]; } 

如果您正在加载的网页提供了现有的元标记,则可能需要对其进行修改,而不是尝试向DOM添加新的元元素。 这个问题讨论这个技术:

我可以在移动Safari浏览器中更改视口元标记吗?

在我的testing应用程序中,我将UIWebView scalesPageToFit设置为YES。

它看起来像底层的UIScrollView可以从iOS 5.x开始访问。

webViewDidFinishLoad:您可以请求缩放,例如:

 [webView.scrollView zoomToRect:CGRectMake(0.0, 0.0, 50.0, 50.0) animated:YES]; 

这似乎工作,即使scalesPageToFit设置为YES

这实际上是辉煌的。 我需要缩放function,而scalePagesToFit是没有。 虽然你的代码TomSwift没有按照我的需要工作,但稍微调整一下就行了。

我在iOS 6.x上运行这个function就像一个魅力。

 NSString* js = @"var meta = document.createElement('meta'); " \ "meta.setAttribute( 'name', 'viewport' ); " \ "meta.setAttribute( 'content', 'width = device-width, initial-scale=1.0, minimum-scale=0.2, maximum-scale=5.0; user-scalable=1;' ); " \ "document.getElementsByTagName('head')[0].appendChild(meta)"; [webView stringByEvaluatingJavaScriptFromString: js]; 

真棒提示汤姆。

尝试更改您设置这些命令的顺序 – 第一个scalePagesToFit为YES,然后:

 [webView stringByEvaluatingJavaScriptFromString: @"document.body.style.zoom = 5.0;"]; 

与我的答案不同的是,在设置宽度之前,您正在清除视口。

这允许Web视图旋转或resize(加载后),而无需重置属性更改。

 - (void)webViewDidFinishLoad:(UIWebView *)webView { // Clear view port NSString* js = @"$('meta[name=viewport]').remove();"; [webView stringByEvaluatingJavaScriptFromString: js]; // Set content size js = [NSString stringWithFormat:@"var meta = document.createElement('meta');" "meta.setAttribute( 'name', 'viewport' ); " "meta.setAttribute( 'content', 'width = device-width, initial-scale = 5.0, user-scalable = yes' ); " "document.getElementsByTagName('head')[0].appendChild(meta);"]; [webView stringByEvaluatingJavaScriptFromString: js]; }