UIWebView не масштабирует содержимое, чтобы соответствовать - PullRequest
40 голосов
/ 03 октября 2009

У меня есть веб-просмотр, который является верхним окном в иерархии и был объявлен, как показано ниже. Тем не менее, он не масштабирует страницы, чтобы соответствовать. Страницы выровнены по левому верхнему краю, но не масштабируются, несмотря на то, что для элемента scalePageToFit установлено значение YES. Любая помощь будет принята с благодарностью.

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

Ответы [ 11 ]

35 голосов
/ 06 июля 2012

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];
    }
}
27 голосов
/ 03 октября 2009

Впоследствии я обнаружил, что некоторые веб-страницы правильно масштабируются, а некоторые - нет. Для веб-страниц, которые не масштабируются должным образом, javascript может использоваться для управления масштабированием следующим образом:

NSString *jsCommand = [NSString stringWithFormat:@"document.body.style.zoom = 1.5;"];
[webLookupView stringByEvaluatingJavaScriptFromString:jsCommand];
22 голосов
/ 27 февраля 2014

Вы можете использовать следующий код:

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

в - (void)webViewDidFinishLoad:(UIWebView *)webView method или viewDidLoad

12 голосов
/ 07 июля 2012

Если у вас есть доступ к загружаемому HTML, вы можете добавить следующий метатег в заголовок:

<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />
7 голосов
/ 09 октября 2015

в Swift2

self.webView.scalesPageToFit = true
self.webView.contentMode = UIViewContentMode.ScaleAspectFit
2 голосов
/ 05 января 2017

Как 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];
}
2 голосов
/ 23 июля 2015

Мое решение в swift:

«Масштабирование страниц по размеру» в webView необходимо проверить в конструкторе интерфейса.

Использовать UIWebViewDelegate.

func webViewDidFinishLoad(webView: UIWebView) {
    let zoom = webView.bounds.size.width / webView.scrollView.contentSize.width
    webView.scrollView.setZoomScale(zoom, animated: true)
}
1 голос
/ 11 августа 2017

В xCode 8.3.3 перейдите на раскадровку представления / сцены, где находится веб-представление, и установите флажок Масштабировать страницу, чтобы подогнать в разделе инспектора атрибутов. Также выберите Scale to Fill в качестве режима содержимого.

1 голос
/ 19 октября 2016

Для Swift 3 , с использованием RunLoop эффективный ответ:

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

0 голосов
/ 27 августа 2014

Попробуйте это в ViewDidLoad вашего ViewController

[self.myWebView setFrame:CGRectMake(self.view.frame.origin.x,
                                   self.view.frame.origin.y,
                                   self.view.frame.size.width,
                                   self.view.frame.size.height)];
  • У меня также есть webviewview, установленный на «scalePageToFit», и режим просмотра, установленный на «Aspect Fit» в моей раскадровке.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...