我有一个webview,它是层次结构中的顶层窗口,并且已声明如下所示。但是,它不会缩放页面以适应。尽管scalesPageToFit属性设置为YES,页面仍然是左上对齐,但未缩放。任何帮助将不胜感激。
webLookupView = [[UIWebView alloc] initWithFrame:CGRectMake(16, 63, 289, 327)];
webLookupView.backgroundColor = [UIColor lightGrayColor];
webLookupView.dataDetectorTypes = UIDataDetectorTypeAll;
webLookupView.scalesPageToFit = YES;
答案 0 :(得分:34)
iOS5提供了更好的解决方案
从webViewDidFinishLoad
调用此方法- (void)zoomToFit
{
if ([theWebView respondsToSelector:@selector(scrollView)])
{
UIScrollView *scrollView = [theWebView scrollView];
float zoom = theWebView.bounds.size.width / scrollView.contentSize.width;
scrollView.minimumZoomScale = zoom;
[scrollView setZoomScale:zoom animated:YES];
}
}
答案 1 :(得分:27)
我后来发现有些网页是正确缩放的,但有些则没有。对于未正确缩放的网页,可以使用javascript控制缩放,如下所示:
NSString *jsCommand = [NSString stringWithFormat:@"document.body.style.zoom = 1.5;"];
[webLookupView stringByEvaluatingJavaScriptFromString:jsCommand];
答案 2 :(得分:22)
您可以使用以下代码:
self.webView.scalesPageToFit = YES;
self.webView.contentMode = UIViewContentModeScaleAspectFit;
- (void)webViewDidFinishLoad:(UIWebView *)webView method
中的
或viewDidLoad
答案 3 :(得分:12)
如果您有权访问正在加载的html,则可以在标题中删除以下元标记:
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />
答案 4 :(得分:2)
我在swift中的解决方案:
需要在界面构建器中检查“在webView上缩放页面以适合”。
使用UIWebViewDelegate。
func webViewDidFinishLoad(webView: UIWebView) {
let zoom = webView.bounds.size.width / webView.scrollView.contentSize.width
webView.scrollView.setZoomScale(zoom, animated: true)
}
答案 5 :(得分:2)
由于mprivate提及here,您可以更新UIWebView的缩放级别。
- (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;
}
实现这一目标的另一种方法是在RunLoop上注入webViewDidFinishLoad上的js代码。
- (void)webViewDidFinishLoad:(UIWebView *)webView {
CGFloat scale = 0.8; // the scale factor that works for you
NSString *js = [NSString stringWithFormat:@"document.body.style.zoom = %f;",scale];
[webView stringByEvaluatingJavaScriptFromString:js];
}
答案 6 :(得分:1)
对于 Swift 3 ,使用 RunLoop 的有效答案:
cv::Rect
答案 7 :(得分:1)
在xCode 8.3.3中,转到Web视图所在的视图/场景的故事板,并在属性检查器部分中选中“缩放页面以适合”。同时选择Scale to Fill作为内容模式。
答案 8 :(得分:1)
任何寻找 WKWebView
答案的人,请尝试以下代码:
extension YourViewController: WKNavigationDelegate {
func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
let jscript = "var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);"
webView.evaluateJavaScript(jscript)
}
}
记得设置 Webview 的 navigationDelegate
。
答案 9 :(得分:-1)
在ViewController的 viewDidLoad
中尝试此操作[self.myWebView setFrame:CGRectMake(self.view.frame.origin.x,
self.view.frame.origin.y,
self.view.frame.size.width,
self.view.frame.size.height)];
答案 10 :(得分:-7)
界面构建器中有“Scale To Fit”选项,所以它应该是编程的东西。