2012-12-13 9 views
5

Nie jestem w stanie zmienić rozmiaru mojej UIWebView.iOS: Zmiana rozmiaru UIWebView po didFinishLoad (zawartość powinna pasować bez przewijania)

Mój UIWebView jest zadeklarowany w .h i połączony w IB. Wysokość w IB wynosi 110. Ale wysokość mojego tekstu wynosi około 1500. Teraz chciałbym zmienić wysokość, aby pełny tekst był czytelny bez przewijania.

Jaki kod zmienia rozmiar mojego UIWebView w webViewDidFinishLoad? Nie można znaleźć NICZEGO, który działa.

+0

'-sizeToFit'? W przeciwnym razie dostęp do 'webView.scrollView.contentSize' –

+0

nic dla mnie nie zadziałało. masz jakiś kod? – filou

+2

Miałem ten sam problem. Jedynym sposobem, w jaki udało mi się go uruchomić, było dodanie programowego widoku do widoku, a następnie modyfikacja jego ramki. Wygląda na to, że nie można modyfikować jego ramki, po prostu jeśli została dodana przez IB –

Odpowiedz

10

Obiekt UIScrollView jest dostępna dla UIWebView począwszy iOS 5. Można używać, aby zmienić rozmiar widoku poprzez realizację wiadomość webViewDidFinishLoad: w swoim delegatem, tak:

-(void)webViewDidFinishLoad:(UIWebView *)webView { 
    CGRect newBounds = webView.bounds; 
    newBounds.size.height = webView.scrollView.contentSize.height; 
    webView.bounds = newBounds; 
} 
+4

Istnieje scenariusz, w którym to nie zadziała. Kiedy UIWebview początkowo jest wyższy niż nowy rozmiar zawartości, zwróci poprzednie ważenie: Np.tworzysz widok WWW o wysokości 100 pikseli, a następnie ładujesz kod HTML za pomocą tylko jednego wiersza tekstu, który powinien mieć na przykład 15 pikseli, rozmiar treści na webViewDidFinishLoad będzie wynosił 100 pikseli, a nie 15 pikseli. Ale jeśli wysokość twojej przeglądarki wynosiła początkowo 1px, na webViewDidFinishLoad rozmiar treści powróci 15 pikseli. Aby temu zapobiec, ustaw wyświetlanie zawsze mniejsze niż oczekiwana. – pablobart

+0

@pablobart Mam scenariusz, w którym wysokość przewijania byłaby mniejsza po zmianie opcji/zmianie orientacji. jakaś poprawka? – neobie

3

Czy próbowałeś już: this answer?

[Edytuj]

Niektórzy faceci powiedzieć to działa:

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

// Change the height dynamically of the UIWebView to match the html content 
CGRect webViewFrame = webView.frame; 
webViewFrame.size.height = 1; 
webView.frame = webViewFrame; 
CGSize fittingSize = [webView sizeThatFits:CGSizeZero]; 
webViewFrame.size = fittingSize; 
// webViewFrame.size.width = 276; Making sure that the webView doesn't get wider than 276 px 
webView.frame = webViewFrame; 

float webViewHeight = webView.frame.size.height; 
} 

To niesprawdzone przez mnie, ale 70 osób głosowało^tej odpowiedzi i jej polecić, aby ustawić sizeTahtFits:CGSizeZero jak reset ramki .size

i niektórzy ludzie wykorzystują JavaScript, aby rozwiązać ten problem:

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
NSString *string = [_webView stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"body\").offsetHeight;"]; 
CGFloat height = [string floatValue] + 8; 
CGRect frame = [_webView frame]; 
frame.size.height = height; 
[_webView setFrame:frame]; 

if ([[self delegate] respondsToSelector:@selector(webViewController:webViewDidResize:)]) 
{ 
    [[self delegate] webViewController:self webViewDidResize:frame.size]; 
} 
} 
+0

dziękuję kalli, ale zawartość powinna być dynamicznie zaimplementowana. wysokość może się zmienić. Wiem, że jest to możliwe bez rozmiaru czcionki. – filou

+0

Technicznie sizeThatFits: wywołanie powinno zostać przekazane 'CGSizeMake (maxWidth, CGFLOAT_MAX)'. –

+0

Czy próbowałeś tego kodu? wydaje się nie działać dla mnie .. – filou

2

jak odpowiedział John i Eric powyżej, ten kawałek kodu działa.

-(void)webViewDidFinishLoad:(UIWebView *)webView { 
    CGRect newBounds = webView.bounds; 
    newBounds.size.height = webView.scrollView.contentSize.height; 
    webView.bounds = newBounds; 
} 

jednak podczas próby z tym kodem i okazało się, że wraca do mnie z właściwego WebView ale niewłaściwego pochodzenia, jeśli to sprawy dla każdego, po prostu zresetować ten kod

webView.frame=CGRectMake(webView.frame.origin.x, webView.center.y, webView.frame.size.width, webView.frame.size.height); 

Y- oś jest ustawiona i otrzymujesz webView tak jak chciałeś.

Powiązane problemy