2011-07-18 2 views
3

UIWebView 자동 회전에 문제가 있습니다.
웹보기화물은 괜찮지 만 콘텐츠는 그렇지 않습니다.
검은 색 여백이있는 하단 스크린 샷에서 볼 수 있듯이 스크롤 할 때 스크롤러를 볼 수 있기 때문에 웹보기라는 것을 알고 있습니다.UIWebView 자동 회전이 웹보기 콘텐츠를 손상시킵니다. (내부 스크린 샷)

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

웹보기가 완전 자동 크기 조정 마스크를하고 뷰는 자동 크기 조정 파단입니다 :

뷰 컨트롤러가 있습니다.

나는 stackoverflow와 google에서 속임수를 썼지 만 그들 중 누구도 일하지 않았습니다.
이것은 일부 사이트에서만 발생하지만 모바일 사파리 또는 iOS 오페라 브라우저에서 문제가있는 사이트를 열면 제대로 돌아갑니다.

편집 : 문제있는 사이트의 예 : 웹보기가이 코드로 인터페이스 빌더 및로드에 설정된

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

+0

당신이 웹보기 관련 코드를 추가 할 수 plz 수 :

또한 당신은 UIWebView의이 속성을 설정할 수 있습니까? 어떻게 만들고 쓰는가? –

+0

하나의 사이트 주소를 제공해 주시겠습니까? – sergio

+0

문제가있는 사이트의 예 : http://m.calcalist.co.il –

답변

2

당신은 YES에 웹보기의 scalesPageToFit 속성을 설정할 수 있습니다.

직접 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;"]; 
} 
+0

시도했지만 도움이되지 않습니다. –

+0

당신이 언급 한 사이트 (m.calcalist.co.il)는 너비가 320 인 뷰포트를 가지고 있기 때문에 그보다 더 넓지는 않습니다. 구현이 아니라 페이지 디자인이 잘못되었습니다. –

+0

제한된 뷰포트에서 벗어나는 방법을 보여주기 위해 내 대답이 업데이트되었습니다. –

3

willAnimateRotationToInterfaceOrientation에 프레임을 설정 한 후 메타 태그를 설정합니다.

webView.autoResizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 
+0

이 솔루션은 나를 위해 작동합니다. 고른 대답이 아닙니다. – temple

+0

예,이 코드는 작동하지만 'R'이 대문자가 아닌 autoresizingMask => autoresizingMask입니다. – Jimmy