2016-09-27 3 views
0

In meiner App gibt es 2 UIWebViews. beide nehmen den gesamten Bildschirm, so dass nur 1 auf einmal sichtbar ist. Wenn ich UIWebView A sehe und das iPad rotiere, wird der HTML-Code richtig dargestellt (mit allen Medienabfragen und CSS-Berechnungen). Aber wenn ich zu UIWebView B wechsle, ist das HTML-Tag 512 statt 768, was dazu führt, dass alle css-Berechnungen durcheinander geraten. Ich überprüfte und das Fenster von UIWebView B löst das Ereignis orientationchange aus (schrieb gerade an die Konsole, als es geschah). Es scheint, dass die Ansicht nicht dargestellt wird, wenn sie nicht sichtbar ist. Irgendeine Idee?UIWebView wird nach der Änderung der Ausrichtung nicht richtig gerendert

Antwort

1

Ein verstecktes UIWebView wird nicht richtig dargestellt (zum Beispiel wenn versteckt und man versucht ein Bild der Ansicht zu erfassen), aber sobald es angezeigt wird, wird das Seitenlayout ausgelöst, und es sollte an diesem Punkt (mit dem aktuellen Bild) korrekt dargestellt werden Größe).

Eine schnelle Schätzung ist es, zu versuchen, UIWebView.scalesPageToFit zu ändern, ich habe das auf True gesetzt und es WFM in dem Fall, den Sie beschreiben.

Ein komplexes Beispiel ist https://github.com/brave/browser-ios, die UIWebViews als Registerkarten versteckt hat (versteckt == nicht in einer Ansichtshierarchie). In dieser App kann man die Bildschirmausrichtung ändern und dann zu einer anderen Registerkarte wechseln, wodurch die neu ausgewählte Registerkarte zur Stammansichtshierarchie hinzugefügt wird, so dass sie angezeigt wird, und die Webseite korrekt angeordnet wird.

+0

Sie meinen, sobald ein Benutzer einen Tab auswählt, wird ein neues UIWebView zur Hierarchie geschoben? Was passiert mit dem vorherigen Tab? Wird es aus der Hierarchie entfernt? Wenn ja, wie würde es den Zustand erhalten, wenn der Benutzer zurückgehen würde? – oriharel

+1

Der Benutzer erstellt eine Registerkarte und ein neues UIWebView, das erstellt und der Ansichtshierarchie hinzugefügt wurde (Ja zur ersten Frage). Die UIWebView der vorherigen Registerkarte wird aus der Ansichtshierarchie entfernt (Ja zu Ihrer nächsten Frage). Wenn die vorherige Registerkarte erneut ausgewählt wurde, wird diese UIWebView erneut der Ansichtshierarchie hinzugefügt. Der Status wird beibehalten, solange das UIWebView im Speicher gehalten wird (d. H. In einer Variablen gespeichert ist), wenn es aus der Superview entfernt wird. –

+0

Klingt nach einem guten Plan. Um keine unerwarteten Ergebnisse zu erzielen, habe ich die Größe von UWebView direkt vor dem Erscheinen "fixieren" (viewWillAppear) - der Elternteil hat die richtige Größe. – oriharel

0

Endete die UIWebView Größe in viewWillAppear zu beheben. nahm die Größe von ihr superview:

UIWebView* webView = (UIWebView*)self.webView; 
[webView setFrame:CGRectMake(0, 0, self.view.superview.frame.size.width, self.view.superview.frame.size.height)]; 
Verwandte Themen