Подтвердить что ты не робот

UIWebView не масштабирует контент для соответствия

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

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

Ответ 1

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

NSString *jsCommand = [NSString stringWithFormat:@"document.body.style.zoom = 1.5;"];
[webLookupView stringByEvaluatingJavaScriptFromString:jsCommand];

Ответ 2

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

Ответ 3

Вы можете использовать приведенный ниже код:

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

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

Ответ 4

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

<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />

Ответ 5

в Swift2

self.webView.scalesPageToFit = true
self.webView.contentMode = UIViewContentMode.ScaleAspectFit

Ответ 6

Мое решение в быстрой:

"Масштабирует страницы для соответствия" в webView необходимо проверить в конструкторе интерфейса.

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

func webViewDidFinishLoad(webView: UIWebView) {
    let zoom = webView.bounds.size.width / webView.scrollView.contentSize.width
    webView.scrollView.setZoomScale(zoom, animated: true)
}

Ответ 7

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

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

Ответ 8

Как 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];
}

Ответ 9

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

Ответ 10

Попробуйте это в вашем 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)];
  • У меня также есть веб-представление, установленное на "scalePageToFit" и viewmode, установленное на "Aspect Fit" в моей раскадровке.

Ответ 11

В построителе интерфейса есть опция "Масштабировать по размеру", поэтому она должна быть чем-то программным, чтобы сделать то же самое.