2010-06-04 3 views
9

UIWebView 자체에서 스크롤하지 않고도 UIWebView을 사용하여 iPhone 화면보다 높은 내용을 표시하려고합니다. UIWebView - (웹보기 자체에서) 스크롤 할 필요가 없도록 자동 크기 조정

UIWebView

UIWebView 아래로 나는 UIScrollView가 스크롤 할 몇 가지 다른 개체와 함께, UIScrollView에 하위 뷰으로 배치된다.

나는이 같은 UITextView이 작업을 수행 할 수 있습니다 알고

CGRect frame = _textView.frame; frame.size.height = _textView.contentSize.height; _textView.frame = frame; 

그러나 UIWebViewUIScrollView에서 상속하지 않습니다 때문에 contentSize -property 포함되어 있지 않습니다.

내가 얻은 데이터가 HTML 블록이기 때문에이 코드를 UIWebView으로 유지하고 싶습니다.

감사합니다.

답변

7

내가 할 수있는 유일한 방법은 웹 페이지의 크기를 가져오고 UIWebView 컨트롤의 크기를 조정하는 데 일부 자바 스크립트를 사용하는 것입니다. 다음과 같은

뭔가 트릭 당신은 콘텐츠 높이로 퍼지 인자의 일종을 추가해야 할 수 있습니다

int content_height = [[theWebView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"] integerValue]; 
CGRect rect = theWebView.frame; 
rect.size.height = content_height; 
theWebView.frame = rect; 

을 수행해야합니다.

+0

아니,이 UIWebView 숨기기 것 같습니다 .. 좋은 생각, 비록. – Emil

+0

content_height = 0. – Emil

+4

위 코드가 원하는 것을 제공하기 전에 UIWebView에서 콘텐츠로드가 완료 될 때까지 기다려야 할 수 있습니다. 위의 코드를 변형하여 일부 웹 응용 프로그램에서 성공적으로 포함 된 IFRAME 태그의 크기를 조정했습니다. – Daniel

14

사실, 자바 스크립트가 필요하지 않습니다! UIView의에서 좋은 방법이있다 :

- (CGSize)sizeThatFits:(CGSize)size 

당신은 아무것도 (여기 정말 의미가 없습니다)를 통과하고, 그것은을 계산하는 컨텐츠 (파단 등)를 사용하여, 그것은 싶습니다 크기 반환 크기. 물론

는 비동기에있는 UIWebView 콘텐츠 로딩, 당신은 웹보기 후이 작업을 수행해야하기 때문에이 UIWebViewDelegate 방법에 예를 들어,로드 :

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    CGSize size = [webView sizeThatFits: CGSizeMake(1.0f, 1.0f)]; // Pass about any size 
    CGRect frame = webView.frame; 
    frame.size.height = size.height; 
    webView.frame = frame; 
} 

잇 짜잔를!

+0

왜,하지만이 작동하지 않았다. 죄송합니다. – Emil

+0

사양 : 이것은 일종의 작업 이었지만 webView에 이미지가 포함되어있는 것은 아니 었습니다. 그 당시에는 이미지가 완전히로드되지 않았기 때문일 수 있습니다. – Emil

+1

아 ... UIWebView는 전체 페이지가 아닌 기본 HTML이로드 될 때이를 알립니다. 어쨌든 이미지가 레이아웃을 변경하면 페이지가 W3C와 호환되지 않습니다 (img 태그에 크기가 포함되어야 함) : p – jv42