2010-06-04 8 views
9

Ich versuche, eine UIWebView für die Anzeige von Inhalten höher als der Bildschirm des iPhone, ohne in der UIWebView selbst scrollen zu müssen.UIWebView - Autoresize, so dass kein Scrollen (in der WebView selbst) benötigt wird

Die UIWebView als Subview ein UIScrollView, platziert zusammen mit einigen anderen Objekten, die ich die UIScrollView will, um nach oben und nach unten mit die UIWebView.

Ich weiß, dass Sie dies mit einem UITextView wie dies tun können:

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

Aber die UIWebView erbt nicht von UIScrollView und ist daher nicht enthalten die contentSize -property.

Ich würde wirklich gerne eine UIWebView behalten, weil die Daten, die ich bekomme, in HTML-Blöcken sind.

Vielen Dank!

Antwort

7

Ich denke, der einzige Weg, den Sie in der Lage sein werden, dies zu tun, ist einige Javascript zu verwenden, um die Größe der Webseite zu erhalten und die Größe des UIWebView-Steuerelements anzupassen.

etwas wie die folgenden sollte den Trick

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

Sie müssen möglicherweise eine Art von Fudge Faktor zum Inhalt Höhe hinzuzufügen.

+0

Nein, das scheint nur das UIWebView zu verbergen. Gute Idee, aber. – Emil

+0

content_height = 0. – Emil

+4

Sie müssen möglicherweise warten, bis das UIWebView Ihren Inhalt geladen hat, bevor der obige Code Ihnen das liefert, was Sie wollen. Ich habe eine Variation des obigen Codes erfolgreich in einigen Web-Apps verwendet, um die Größe eingebetteter IFRAME-Tags zu ändern. – Daniel

14

Tatsächlich wird kein Javascript benötigt! In UIView gibt es eine schöne Methode:

- (CGSize)sizeThatFits:(CGSize)size 

Sie geben ihm etwas (nicht wirklich sinnvoll hier), und es gibt die Größe es sein möchte, seinen Inhalt mit (Subviews, etc.) die berechnen Größe.

Natürlich, da Inhalt Laden in einem UIWebView in asynchronen, sollten Sie dies tun, nachdem der Webansicht geladen, zum Beispiel in der UIWebViewDelegate Methode:

- (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; 
} 

Et voila!

+0

Ich weiß nicht warum, aber das hat nicht funktioniert. Es tut uns leid. – Emil

+0

Spezifikation: Dies hat irgendwie funktioniert, aber nicht, wenn das WebView Bilder enthält, wahrscheinlich weil diese zur Zeit nicht vollständig geladen sind. – Emil

+1

Ah ... so UIWebView benachrichtigen, wenn der Basis-HTML geladen ist, nicht die ganze Seite. Wie auch immer, wenn Ihre Bilder Ihr Layout ändern, sind Ihre Seiten nicht W3C-konform (sollte Größe im img-Tag enthalten): p – jv42

Verwandte Themen