Wie kann ich das Vergrößern von UIWebView aktivieren, das sich in UIScrollView befindet?

132

Ich habe eine UIWebViewwelche in einer UIScrollView(Bildlaufansicht enthält eine andere Komponente)

Ich habe versucht , sowohl zu ermöglichen Multi - Touch - Interface Builder oder Programmatische auf , UIWebViewaber es kann immer noch nicht heran für html, ich in beiden Zoom behandeln muß an dem UIScrollViewund UIWebView? Oder etwas, das ich nicht einstellen muss?

kalenderw
quelle
2
scalesPageToFit = YESEs funktioniert, aber es ändert Ihre Standardinhaltsgröße. Schauen Sie sich meine Antwort an, dies wird für Sie hilfreich sein.
iPatel

Antworten:

348

Sie MÜSSEN scalePageToFit = YES setzen, damit das Kneifen und Zoomen in einer UIWebView funktioniert

John Geshrick
quelle
2
Das ist gut, außer dass meine Seite jetzt verkleinert wird, um in die Ansicht zu passen. Ich erstelle eine HTML-Seite in Code, um sie anzuzeigen, und ich möchte, dass sie in der vorherigen Größe bleibt, aber meinen Benutzern erlaubt, mit Prise Zoom hineinzuzoomen
Dan F
33
Fügen Sie dem Kopf Ihres HTML-Dokuments das folgende Meta-Tag hinzu: <meta name = 'viewport' content = 'initial-scale = 1.0, maximum-scale = 10.0' />
vocaro
2
Wie kann ich dasselbe mit einer externen Website machen? Das heißt, ich stelle den anfänglichen Zoom ein und der Benutzerzoom wird danach aktiviert.
William Jockusch
Hallo, alles funktioniert gut Paging, Vergrößern / Verkleinern usw. Aber ich habe ein Problem damit. Meine App arbeitet in beiden Richtungen (Portrait & Landscape). Jetzt muss ich im Hochformat 2-3 Mal über die Seite wischen, um zur nächsten Seite zu gelangen. Aber in der Landschaft funktioniert es gut. Ich habe Webview in Scrollview genommen und Scrollview hat Paging. Aber wenn ich versucht habe, die Schriftrolle zu wischen, um zur nächsten Seite zu gelangen, muss ich sie zwei- bis dreimal wischen, um zur nächsten Seite zu gelangen (im Hochformat). Irgendeine Idee dazu. Danke für die Hilfe.
Nishant B
perfekte Antwort ... Danke
AL̲̳I
12

OK, Sie müssen sowohl die oben genannten als auch die folgenden Schritte ausführen. Ich hatte eine Webansicht in der Hauptansicht, und das hat nicht funktioniert.

  1. Wie oben müssen Sie zuerst eine UIScrollView in die Hauptansicht und dann die Webansicht in die Bildlaufansicht einfügen.
  2. Implementieren <UIScrollViewDelegate>Sie wie oben in Ihrem Ansichts-Controller, ziehen Sie den Delegaten für die Bildlaufansicht auf den Ansichts-Controller in Interface Builder und implementieren Sie die viewForZoomingInScrollViewMethode. Dies muss den Zeiger auf die UIScrollView zurückgeben (return myScrollView).
  3. Ich habe IBOutlet-Eigenschaften sowohl für die Webansicht als auch für die Bildlaufansicht erstellt. Verknüpfen Sie sie in der NIB mit Ihrem Ansichtscontroller.
  4. Gehen Sie in der Bildlaufansicht zum Attributinspektor und stellen Sie Ihre maximalen und minimalen Zoomfaktoren ein (ich habe 0,5 bis 5,0 eingestellt, das funktioniert gut).
  5. In der Webansicht im Attributinspektor:
  6. Wählen Sie im Abschnitt Webansicht die Option Zu skalierende Seiten skalieren aus
  7. Wählen Sie im Abschnitt "Ansicht" für den Modus "Oben links".
  8. Aktivieren Sie im Abschnitt Ansicht unten die Option Benutzerinteraktion aktiviert und Mehrfachberührung aktiviert
Jay Imerman
quelle
3

Mit JavaScript können Sie die Zoomstufe steuern, obwohl die von mir gefundene oly-Lösung nicht reibungslos aussieht.

Angenommen, Sie haben in <head>:

<meta id="vp" name="viewport" content="width=768,initial-scale=1.0">

Ändern Sie den Inhalt zweimal, um auf das 4-fache zu zoomen und dem Benutzer dennoch das Ändern des Zooms zu ermöglichen:

var vp = document.getElementById('vp');
vp.content = "width=767,minimum-scale=4.0,maximum-scale=4.0,user-scalable=yes";
vp.content = "width=768,minimum-scale=0.25,maximum-scale=10.0,user-scalable=yes";

Das Umschalten der Breite ist sehr wichtig. Andernfalls weist Mobile Safari schwerwiegende Fehler beim Neulackieren auf (aufgrund von Überoptimierung).

Sie können nicht einfach initial-scaleerneut einstellen - es wird beim zweiten Mal ignoriert.

Robocat
quelle