iPhone UIWebView Breite passt nicht nach Zoom Funktion + UIInterfaceOrientation ändern
Ich erstellt ein bare-bones-iPhone-app mit UIWebView (Skalen-Seite, um Fit = YES, shouldAutorotateToInterfaceOrientation = JA) geladen und eine Webseite, z.B. https://stackoverflow.com/
Drehen des Geräts zeigt, dass UIWebView ist die automatische Anpassung der Breite passt. Gut.
Falsche: Zoom in die Seite und zoom-out. Jetzt drehen des Geräts zeigt UIWebView in eine unheimliche Breite in eine der Orientierung (wenn u zoom im Querformat, das hochformat die Breite ist merkwürdig, Umgekehrt). Dieses Verhalten ist behoben nur wenn Sie navigieren Sie zu einer anderen Seite.
Richtige: Laden Sie die gleiche URL in Mobile Safari. Drehen funktioniert & die Breite passt, unabhängig von der Zoom-übung.
Ist das ein UIWebView bug (wahrscheinlich nicht)? Oder gibt es etwas, das getan werden muss, um die Dinge "einfach funktionieren", wie in Mobile Safari?
InformationsquelleAutor der Frage choonkeat | 2010-05-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich etwas gefunden, das für mich gearbeitet. Das problem ist, dass wenn uiwebview seine Ausrichtung ändert web-Inhalte sind zoommed anpassen viewport. Aber zoomscale parameter der scrollview Untersicht wird nicht korrekt aktualisiert (noch aktualisiert werden minimumZoomScale noch maximumZoomScale
Dann müssen wir es manuell zu tun zu
willRotateToInterfaceOrientation
:Hoffe, das hilft!
InformationsquelleAutor der Antwort M Penades
Ich habe versucht die Lösung von M Penades, und dies scheint zu funktionieren für mich.
Das einzige Problem, das ich erlebe, ist, dass beim ausführen dieser auf ein 3Gs die rotation ist leider nicht sehr glatt.
Ich bin daher jetzt mit einem anderen Ansatz:
Beste Grüße,
Ralph
InformationsquelleAutor der Antwort Ralph
versuchen, diesen code, es wurde nur unwesentlich ändert die Zoomstufe (1.01) zu ermöglichen UIWebView Erhöhung der Größe des Inhalts im landscape-Modus
findScrollViewInsideView: Methode Hinzugefügt, die Unterstützung für ios4
InformationsquelleAutor der Antwort storoj
Ich bin dieses posting, weil ich auch vor dem gleichen problem, und hier bin ich nach der
M Penades
Ansatz.M Penades
's Antwort woks gut, nur für den Fall, wenn der Benutzer nicht Verzerren(pinch Out) der Webview dann drehen Sie das Gerät und wiederholen den Vorgang .dann Inhalt Größe von UiwebView bekommt, reduzieren sich allmählich. so, dass war das Problem kam inM Penades
Antwort. so habe ich behoben, das Problem auch und mein code ist wie folgt.1) Für Diese ich die Pinch-Geste, so dass, wenn der Benutzer kippen Die UIwebView könnte prüfen, die Skalierte Größe von UIwebView.
//Man Dieser Bitte importieren Sie Die
UIGestureRecognizerDelegate
Protokoll '.h-Datei,'Rückkehr JA garantiert ist, erlauben die gleichzeitige Anerkennung. zurückgeben NEIN das ist nicht garantiert, um zu verhindern gleichzeitiger Anerkennung, wie die andere Geste ist Delegierter kann die Rückkehr JA
Wenn Benutzer Hase Pinch In/Out Die Web-Ansicht in diesem Fall wird Nur Festgelegt, Dass der Zoom-Faktor .
SO, dass WebView Einstellen der ContentSize als Oreintaion Geändert.
Diese Funktioniert perfekt auch für Benutzer neigen der UIWebView.
InformationsquelleAutor der Antwort Kamarshad
Habe ich eine Lösung für dieses problem, aber ich muss sagen, ich bin kein großer fan von ihm. Es funktioniert Super, aber die Lösung tatsächlich verursacht ein anderes problem. Ich habe eine Lösung für das sekundäre Problem, aber es dauert ein bisschen Mühe.
Nur im Hinterkopf behalten, dass seit OS3.2 oder iOS4 (nicht sicher welche) UIWebView ist die direkte Untersicht ist jetzt UIScrollView statt UIScroller, so können wir viel mehr tun. Auch, da der Zugriff auf Unteransichten einer Ansicht ist nicht eine private Aktion, die weder über eine Untersicht, angeheuert als dokumentiert, können wir eine Menge tun, mit der UIWebView, ohne zu brechen die Regeln.
Zuerst müssen wir die UIScrollView aus der UIWebview:
Nun müssen wir ändern den Delegierten dieses scrollview so können wir überschreiben scrollview Anrufe (das kann tatsächlich die Ursache für einen sekundären Fehler als Ergebnis dieser Lösung, die ich teilen werde, in einem moment):
Nun, wenn Sie versuchen, es an diesem Punkt, wird der Zoom ist kaputt. Wir implementieren müssen, um eine UIScrollViewDelegate Methode, um es zu beheben. hinzufügen:
webBrowserView ist eigentlich ein UIWebBrowserView, aber das ist nicht dokumentiert, Klasse, also sind wir nur gehen, um es zu behandeln, als ein UIView.
Nun führen Sie Ihre app aus, die Sie vergrößern und dann verkleinern der Webseite. Drehen, und es sollte richtig angezeigt werden.
Dieser bewirkt, dass ein ziemlich großer bug, das ist vielleicht noch schlimmer als das original.
Wenn Sie zoom-in und dann drehen Sie Sie Locker scrolling-Fähigkeit, aber Ihre Ansicht gezoomt werden noch. Hier ist der fix Für die ganze Sache.
Zuerst müssen wir verfolgen ein paar zahlen, und haben ein flag definiert:
Ich habe diese Definition in meinem h-Datei:
Können Sie denken, Sie können nur greifen diese zahlen von UIScrollView, aber wenn Sie Sie brauchen, die Sie geändert haben, so müssen wir Sie an anderer Stelle gespeichert.
Brauchen wir eine weitere delegate-Methode:
Nun wird es in einen Schlamassel ich mich fühle.
Wir brauchen, um zu verfolgen rotation, so müssen Sie dies Ihrer viewDidLoad, loadView oder was auch immer Methode, die Sie verwenden, um zu registrieren, Benachrichtigungen:
und erstellen Sie diese Methode:
So jetzt jedes mal, wenn Sie drehen webViewOrientationChange aufgerufen werden. Der Grund performSelector verzögert 0,0 Sekunden wird, weil wir möchten, rufen Sie adjustWithZoomData auf der nächsten runloop. Wenn Sie direkt aufrufen, die adjustWithZoomData wird die Einstellung für die Vorherige Ausrichtung.
Hier ist die adjustWithZoomData Methode:
Thats it! Nun, wenn Sie drehen Sie es pflegen zoom, und etwa die Aufrechterhaltung des korrekten offset. Wenn jemand will, um die Mathematik zu tun, wie man das exakt die richtige offset dann gehen Sie für es!
InformationsquelleAutor der Antwort maxpower
Suchte ich in dieser mich und fand heraus, einige weitere Informationen:
Probleme beim ändern zoom:
z.B. wenn aktuelle Breite ist 1024, und Sie möchten, um zu vergrößern von 1 zu 1,5 im Querformat können Sie:
InformationsquelleAutor der Antwort robocat
Also anscheinend habe ich die Lösung von M Penades am Ende (und vergessen diesen Beitrag zu aktualisieren! sorry).
Was ich Tat, war, um die Größe des gesamten Dokuments (und meine schriftart,-Größe, um die Dinge in angemessenem Umfang). Scheinbar wurde das Problem behoben.
Aber, meine UIWebView ist nur für das laden von meinen eigenen HTML & CSS aus dem iOS-Dateisystem - wenn Sie ein Allzweck-web-browser, dieser trick funktioniert möglicherweise nicht als auch.
ViewController.m
Und app.css
Gist bei https://gist.github.com/d6589584944685909ae5
InformationsquelleAutor der Antwort choonkeat
Rotation, versuchen Sie, die scrollView zoomScale auf 0.
Siehe meine ausführliche Antwort hier: UIWebView-Inhalte, die nicht angepasst werden, um neuen Rahmen nach der rotation
InformationsquelleAutor der Antwort Ion