Comment puis-je activer le zoom avant sur UIWebView qui se trouve dans UIScrollView?

132

J'ai un UIWebViewqui dans un UIScrollView(scrollview contient un autre composant)

J'ai essayé d'activer le multitouch à la fois sur Interface Builder ou sur Programmatique , UIWebViewmais il ne peut toujours pas zoomer pour le html, dois-je gérer à la fois le zoom avant UIScrollViewet UIWebView? Ou quelque chose que je n'ai pas à régler?

calendrierw
la source
2
scalesPageToFit = YEScela fonctionne mais cela change la taille de votre contenu par défaut, regardez ma réponse cela vous sera utile.
iPatel

Réponses:

348

Vous DEVEZ définir scalePageToFit = YES pour que tout pincement et zoom fonctionne sur un UIWebView

John Geshrick
la source
2
C'est bien, sauf que maintenant ma page est réduite pour s'adapter à la vue. Je crée une page html dans le code à afficher, et je veux qu'elle reste à la taille précédente, mais permette à mes utilisateurs de zoomer avec un zoom par pincement
Dan F
33
Ajoutez la balise Meta suivante à l'en-tête de votre document HTML: <meta name = 'viewport' content = 'initial-scale = 1.0, maximum-scale = 10.0' />
vocaro
2
Comment puis-je faire la même chose avec un site Web externe? Autrement dit, j'ai défini le zoom initial et le zoom utilisateur est activé par la suite.
William Jockusch
Salut, tout fonctionne bien Paging, ZoomIn / Out, etc ... Mais j'ai un problème à ce sujet. Mon application fonctionne dans les deux sens (Portrait et Paysage). Maintenant, en portrait, je dois faire glisser la page 2-3 fois puis je peux aller à la page suivante. Mais en paysage, ça marche bien. J'ai pris webview à l'intérieur de scrollview et scrollview ont la pagination. Mais quand j'ai essayé de faire glisser le parchemin pour aller à la page suivante, je dois le faire glisser 2 à 3 fois pour aller à la page suivante (en mode portrait). Toute idée concernant la même chose. Merci pour l'aide.
Nishant B
réponse parfaite ... Merci
AL̲̳I
12

OK, vous devez faire à la fois ce qui précède, mais aussi ce qui suit. J'avais une vue Web dans la vue principale, et cela ne fonctionnait pas.

  1. Comme ci-dessus, vous devez d'abord mettre un UIScrollView dans la vue principale, puis mettre la vue Web dans la vue de défilement.
  2. Comme ci-dessus, implémentez <UIScrollViewDelegate>dans votre contrôleur de vue, faites glisser le délégué de vue de défilement vers le contrôleur de vue dans Interface Builder et implémentez la viewForZoomingInScrollViewméthode. Cela doit renvoyer le pointeur vers UIScrollView (return myScrollView).
  3. J'ai créé des propriétés IBOutlet pour la vue Web et la vue de défilement - liez-les dans le NIB à votre contrôleur de vue.
  4. Sur la vue de défilement, allez dans l'inspecteur d'attributs, définissez vos facteurs de zoom Max et Min (j'ai mis 0,5 à 5,0, cela fonctionne bien).
  5. Sur la vue Web, dans l'inspecteur d'attributs:
  6. Dans la section Vue Web, sélectionnez Mettre les pages à l'échelle pour s'adapter
  7. Dans la section Affichage, sélectionnez Mode, "En haut à gauche"
  8. Dans la section Affichage en bas, cochez Interaction de l'utilisateur activée et Activé par plusieurs touches
Jay Imerman
la source
3

Avec JavaScript, vous pouvez contrôler le niveau de zoom, bien que la seule solution que j'ai trouvée ne semble pas fluide.

Dites que vous avez dans <head>:

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

Pour zoomer jusqu'à 4x, tout en permettant à l'utilisateur de modifier le zoom, modifiez le contenu deux fois:

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";

Changer la largeur est très important - sinon Mobile Safari a de sérieux bugs de repeinture (en raison d'une sur-optimisation).

Vous ne pouvez pas simplement régler à initial-scalenouveau - il est ignoré la deuxième fois.

Robocat
la source