UIWebView – 加载外部网站,以编程方式设置初始缩放比例,然后允许用户缩放
是否有可能做到以上所有? SO给了我一个很好的方法来设置这里的初始缩放比例。 即,要在我的webViewDidFinishLoad方法中包含以下行:
[webView stringByEvaluatingJavaScriptFromString: @"document.body.style.zoom = 5.0;"];
但是我仍然不能做的是允许用户在程序初始化之后改变缩放比例。 如果我将scalePagesToFit设置为NO,则用户不能更改缩放比例。 如果我将scalePagesToFit设置为YES,它将覆盖我的编程缩放。
谁能帮忙?
编辑:谢谢你的回应。 但是,如果我缩放scrollView,事情模糊一点。
您可以添加或修改<meta name='viewport'
标签来实现这一点。 这里的meta / viewport标签上的苹果文档:
下面是加载文档后添加标签的示例:
- (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]; }
- UIPinchGestureRecognizer分别在水平和垂直方向上缩放
- 如何将UIView缩放(缩放)到给定的CGPoint
- 使用iOS 6.0 SDK并为iOS 5构build目标导致UIScrollView setMinimumZoomScale在iOS 5模拟器上运行时失败
- 获取设备图像比例(例如@ 1x,@ 2x和@ 3x)
- UIImageView,setClipsToBounds和我的图像是如何失去理智
- UIWebView加载外部网站时,以编程方式设置初始缩放比例?
- CGAffineTransformScale不能使用零刻度
- iOS平台上的HTML5canvas缩放问题
- 三重嵌套的UIScrollView分页问题