UIWebView不会缩放内容以适应

时间:2009-10-02 20:44:05

标签: iphone objective-c

我有一个webview,它是层次结构中的顶层窗口,并且已声明如下所示。但是,它不会缩放页面以适应。尽管scalesPageToFit属性设置为YES,页面仍然是左上对齐,但未缩放。任何帮助将不胜感激。

webLookupView = [[UIWebView alloc] initWithFrame:CGRectMake(16, 63, 289, 327)];
webLookupView.backgroundColor = [UIColor lightGrayColor];
webLookupView.dataDetectorTypes = UIDataDetectorTypeAll;
webLookupView.scalesPageToFit = YES;

11 个答案:

答案 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)];
  • 我也将webview设置为“scalePageToFit”,并在我的Storyboard中将viewmode设置为“Aspect Fit”。

答案 10 :(得分:-7)

界面构建器中有“Scale To Fit”选项,所以它应该是编程的东西。