代码之家  ›  专栏  ›  技术社区  ›  RunLoop

UIWebView不缩放内容以适应

  •  40
  • RunLoop  · 技术社区  · 15 年前

    我有一个WebView,它是层次结构中的顶部窗口,已声明如下。但是,它不会根据需要调整页面大小。页面左上对齐,但不缩放,尽管scalesPageToFit属性设置为“是”。任何帮助都将不胜感激。

    webLookupView = [[UIWebView alloc] initWithFrame:CGRectMake(16, 63, 289, 327)];
    webLookupView.backgroundColor = [UIColor lightGrayColor];
    webLookupView.dataDetectorTypes = UIDataDetectorTypeAll;
    webLookupView.scalesPageToFit = YES;
    
    11 回复  |  直到 7 年前
        1
  •  34
  •   henkieee    8 年前

    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];
        }
    }
    
        2
  •  27
  •   RunLoop    15 年前

    我后来发现有些网页的比例是正确的,但有些没有。对于未正确缩放的网页,可以使用javascript控制缩放,如下所示:

    NSString *jsCommand = [NSString stringWithFormat:@"document.body.style.zoom = 1.5;"];
    [webLookupView stringByEvaluatingJavaScriptFromString:jsCommand];
    
        3
  •  21
  •   Homam    10 年前

    您可以使用以下代码:

    self.webView.scalesPageToFit = YES;
    self.webView.contentMode = UIViewContentModeScaleAspectFit;
    

    在里面 - (void)webViewDidFinishLoad:(UIWebView *)webView method viewDidLoad

        4
  •  12
  •   Mongus Pong    12 年前

    如果您可以访问正在加载的HTML,则可以在头中丢弃以下元标记:

    <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />
    
        5
  •  7
  •   Andrii Chernenko    9 年前

    在SWIFT2中

    self.webView.scalesPageToFit = true
    self.webView.contentMode = UIViewContentMode.ScaleAspectFit
    
        6
  •  2
  •   Zoltan Vinkler    9 年前

    我的快速解决方案:

    需要在Interface Builder中检查WebView上的“缩放页面以适应”。

    使用uiWebViewDelegate。

    func webViewDidFinishLoad(webView: UIWebView) {
        let zoom = webView.bounds.size.width / webView.scrollView.contentSize.width
        webView.scrollView.setZoomScale(zoom, animated: true)
    }
    
        7
  •  2
  •   Community CDub    7 年前

    AS 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;  
    }
    

    实现这一点的另一种方法是在WebViewDidFinishLoad上注入JS代码 RunLoop 说。

    - (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];
    }
    
        8
  •  1
  •   Van    8 年前

    为了 斯威夫特3 使用 运行循环 有效答案:

    self.webView.stringByEvaluatingJavaScript(from: "document.body.style.zoom = 1.5;")

        9
  •  1
  •   crissyg    7 年前

    在Xcode8.3.3中,转到Web视图所在的视图/场景的故事板,并检查“缩放”页面以适应“属性检查器”部分。也可以选择“缩放以填充”作为内容模式。

        10
  •  -1
  •   Anthony De Souza    10 年前

    在视图控制器中尝试此操作 可视负载

    [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设置为“scaleGetOfit”,将ViewMode设置为“AspectFit”。
        11
  •  -7
  •   Kai    13 年前

    在InterfaceBuilder中有“按比例”选项,因此这样做应该是编程的。