2011-01-03 7 views
1

ich Inhalte in eine UIWebView mit dem folgenden Aufruf Laden:UIWebView Dokument bleibt Höhe der höchsten Inhalt

NSString *detailHtmlString = [NSString stringWithFormat:@"<html><head><style>body {background: black;color: white;line-height: 1.4em; font-family: sans-serif; margin: 0; padding: 0 0 30px 0;width: 280px;} p {margin-top: 10px;}</style></head><body id=\"content\">%@</body></html>",[currentWeek objectForKey:@"post_content"]]; 
[weekDetailController.movie_detail loadHTMLString:detailHtmlString baseURL:nil]; 

Dann, nachdem sie es fertig geladen:

- (void) webViewDidFinishLoad:(UIWebView *)sender { 
    [self performSelector:@selector(calculateWebViewSize) withObject:nil afterDelay:0.1]; 
} 

- (void) calculateWebViewSize { 

    [weekDetailController.movie_detail sizeToFit]; 
    float newHeight = [[weekDetailController.movie_detail stringByEvaluatingJavaScriptFromString :@"document.getElementById(\"content\").offsetHeight"] floatValue]; 


    newHeight += 300; //height of the other elements 
    NSLog(@"Height: %f",newHeight); 

    CGRect frame = weekDetailController.movie_detail.frame; 

    NSLog(@"Height was: %f",frame.size.height); 

    frame.size.height = newHeight; 

    weekDetailController.movie_detail.frame = frame; 

    [scrollView.scrollView setContentOffset:CGPointZero]; 
    [scrollView.scrollView setContentSize:CGSizeMake(frame.size.width, frame.size.height)]; 
} 

Dies funktioniert gut die erste Zeit, zu der die Ansicht geladen wird, aber in nachfolgenden Ansichten, wenn unterschiedliche Inhalte in die UIWebView geladen wurden (mit dem gleichen Aufruf wie oben), gibt der JavaScript-Aufruf für die Höhe immer größere Werte zurück - auch wenn der Inhalt kleiner ist. Es gibt immer noch die Höhe der größten Menge an Inhalt, der war irgendwann in der Aussicht gewesen. Ich habe versucht, eine leere HTML-Zeichenfolge in die Ansicht zu laden, um sie zu "löschen", aber das scheint auch nicht zu helfen.

Alle Hinweise wären willkommen!

+1

Uhmm ... Du stellst newHeight nicht in den obigen Code zurück, sondern fügst lediglich 300 hinzu ... – Altealice

+0

whoops - ging beim Entfernen von kommentiertem Code über Bord und entfernte eine Zeile (unkommentiert), die newHeight setzte - ursprünglicher Post wurde geändert –

Antwort

0
[scrollView.scrollView setContentOffset:pt]; 
[scrollView.scrollView setContentSize:CGSizeMake(frame.size.width, frame.size.height)]; 

Verwenden Sie verschachtelte UIScrollViews? Es kann sein, dass Sie nur die Größe der inneren Bildlaufansicht festlegen und die äußere Bildlaufansicht auf die größte Größe des Inhalts beschränken.

Edit:

Auch sollten Sie nur verwenden [scrollView.scrollView setContentOffset:CGPointZero];

+0

Das CGPointZero-Element wurde korrigiert - Danke für den Tipp. Nein, es ist kein geschachtelter UIScrollView - nur einer mit einem UIWebView darin. Der Code, den Sie eingefügt haben, war nur eine Kopie von dem, was ich oben hatte, also leider noch nichts gelöst. –

+0

Ja, ich habe kopiert, ich wollte darauf hinweisen, auf welchen Teil deines Codes ich mich bezog. Trotzdem frage ich mich, warum Sie 'scrollView.scrollView' verwendet haben ... Wie auch immer, UIWebView ist eine UIScrollView-Unterklasse, daher sollten Sie immer noch die contentSize der äußeren Bildlaufansicht einstellen. Tust du es? – Altealice

+1

Soweit ich das beurteilen kann, ist UIWebView keine UIScrollView-Unterklasse - sie stammt direkt von UIView ab, obwohl sie dem UIScrollView-Delegaten entspricht. Es hat definitiv kein contentSize-Element - nur ein Frame-Attribut, das ich oben gesetzt habe. –

0

Wenn mit Constraints mit verschachtelten UIWebViews, müssen Sie die Einschränkung (zB 1) und laden Sie die Webansicht danach zurückgesetzt:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, coordinator.transitionDuration * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ 
    self.webViewHeightConstraint.constant = 1; 
    [self reloadWebView]; //[self.webview reload] doesn't work here, simply load with the given url or given html content 
}); 
Verwandte Themen