是否有可能做到以上所有? SO给了我一个很好的方法来设置初始缩放比例here。即,要在我的webViewDidFinishLoad方法中包含以下行:
[webView stringByEvaluatingJavaScriptFromString: @"document.body.style.zoom = 5.0;"];
但我仍然不能做的是允许用户在程序初始设置后更改缩放比例。如果我将scalePagesToFit设置为NO,则用户无法更改缩放比例。如果我将scalePagesToFit设置为YES,它将覆盖我的程序化缩放。
有人可以帮忙吗?
编辑:感谢您的回复。但是,如果我缩放scrollView,事情就会模糊不清。答案 0 :(得分:40)
您可以添加或修改<meta name='viewport'
标记来实现此目的。有关meta / viewport标记的Apple文档:
以下是加载文档后添加标记的示例:
- (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添加新的元元素。这个SO问题讨论了这项技术:
Can I change the viewport meta tag in mobile safari on the fly?
在我的测试应用中,我将UIWebView
scalesPageToFit
设置为YES。
答案 1 :(得分:3)
从 iOS 5.x 开始,可以访问基础UIScrollView
。
在webViewDidFinishLoad:
中,您可以请求缩放,例如:
[webView.scrollView zoomToRect:CGRectMake(0.0, 0.0, 50.0, 50.0) animated:YES];
即使将scalesPageToFit
设置为YES
,这似乎也能正常工作。
答案 2 :(得分:3)
这实际上很棒。我需要具有缩放功能,而scalePagesToFit为NO。虽然你的代码TomSwift没有按照我的需要工作,但稍作调整才能解决问题。
我在iOS 6.x上运行它...就像一个魅力。
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];
真棒小费汤姆。
答案 3 :(得分:0)
尝试更改设置这些命令的顺序 - 首先将scalePagesToFit设置为YES,然后:
[webView stringByEvaluatingJavaScriptFromString: @"document.body.style.zoom = 5.0;"];
答案 4 :(得分:0)
与我的回答不同的是,您在设置宽度之前清除视口。
这允许在不重置属性更改的情况下旋转或调整Web视图大小(加载后)。
- (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];
}