Автоматическое вращение UIWebView повреждает содержимое веб-представления (снимки экрана внутри) - PullRequest
3 голосов
/ 18 июля 2011

У меня проблема с автоматическим вращением UIWebView.
веб-представление работает нормально, а содержимое - нет.
как вы можете видеть на нижнем скриншоте, есть черное поле, и я знаю, что это веб-просмотр, поскольку я могу видеть скроллеры, когда прокручиваю.

контроллер вида имеет:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{
    return YES;
}

веб-просмотр имеет маску с полным автоматическим изменением размера, а представление имеет автоматическое изменение размера подпредставлений.

Я попробовал несколько трюков из stackoverflow и Google, но ни один из них не сработал.
это происходит только на некоторых сайтах, но если я открываю проблемные сайты в мобильном сафари или даже в браузере IOS Opera, он вращается правильно.

РЕДАКТИРОВАТЬ: пример проблемного сайта: http://m.calcalist.co.il

веб-просмотр задается в конструкторе интерфейсов и загружается с этим кодом:

[_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://m.calcalist.co.il"]]];

scalesPageToFit = YES; // doesn't help

Спасибо!

before rotation

after rotation

Ответы [ 2 ]

3 голосов
/ 18 июля 2011

Установите кадр в willAnimateRotationToInterfaceOrientation, а затем установите метатеги.

Также вы можете установить это свойство UIWebView:

webView.autoResizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
2 голосов
/ 18 июля 2011

Вы можете установить для свойства scalesPageToFit веб-представления значение YES.

Если вы сами генерируете HTML, вы также можете установить метатег viewport.

Если на странице уже установлен видовой экран, вы можете установить свой viewcontroller в качестве представителя веб-представления и изменить его следующим образом:

- (void)webViewDidFinishLoad:(UIWebView *)webView {

    NSString *javaScript = @"var metatags = document.getElementsByTagName('meta'); \
    for(cnt = 0; cnt < metatags.length; cnt++) { \
        var element = metatags[cnt]; \
        if(element.getAttribute('name') == 'viewport') { \
            element.setAttribute('content','width = device-width; user-scalable = yes'); \
        } \
    }";
    [webView stringByEvaluatingJavaScriptFromString:javaScript];
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {

    if ([self interfaceOrientation] == UIInterfaceOrientationPortrait)
        [webView stringByEvaluatingJavaScriptFromString:@"document.body.style.zoom = 1.0;"];
    else
        [webView stringByEvaluatingJavaScriptFromString:@"document.body.style.zoom = 1.5;"];
}
...