UIWebView不会缩放适合的内容
我有一个webview这是层次结构中的顶级窗口,已被声明如下所示。 但是,它并不适合缩放页面。 页面左上angularalignment,但不缩放,尽pipescalesPageToFit属性设置为YES。 任何帮助将不胜感激。
webLookupView = [[UIWebView alloc] initWithFrame:CGRectMake(16, 63, 289, 327)]; webLookupView.backgroundColor = [UIColor lightGrayColor]; webLookupView.dataDetectorTypes = UIDataDetectorTypeAll; webLookupView.scalesPageToFit = YES;
iOS5提供了更好的解决scheme
从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]; } }
我后来发现,一些网页是正确的缩放,但有些不是。 对于没有正确缩放的网页,javascript可以用来控制缩放,如下所示:
NSString *jsCommand = [NSString stringWithFormat:@"document.body.style.zoom = 1.5;"]; [webLookupView stringByEvaluatingJavaScriptFromString:jsCommand];
你可以使用下面的代码:
self.webView.scalesPageToFit = YES; self.webView.contentMode = UIViewContentModeScaleAspectFit;
in - (void)webViewDidFinishLoad:(UIWebView *)webView method
或viewDidLoad
如果您有权访问您正在加载的HTML,则可以在头中查找以下元标记:
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />
在Swift2中
self.webView.scalesPageToFit = true self.webView.contentMode = UIViewContentMode.ScaleAspectFit
我的解决scheme很快:
需要在界面构build器中检查“在webView上缩放页面以适合”。
使用UIWebViewDelegate。
func webViewDidFinishLoad(webView: UIWebView) { let zoom = webView.bounds.size.width / webView.scrollView.contentSize.width webView.scrollView.setZoomScale(zoom, animated: true) }
对于Swift 3 ,使用RunLoop的有效答案:
self.webView.stringByEvaluatingJavaScript(from: "document.body.style.zoom = 1.5;")
正如mprivate 在这里提到的,你可以更新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; }
实现这个的另一种方法是将注入js代码的webViewDidFinishLoad 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]; }
在xCode 8.3.3中,转到Web视图所在的视图/场景的情节提要,并在“属性”检查器部分中选中“缩放页面以适合”。 同样selectScale to Fill作为内容模式。
在你的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”和viewmode设置为“Aspect Fit”。
在界面生成器中有“Scale to Fit”选项,所以它应该是程序化的。