web-dev-qa-db-fra.com

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

J'ai un UIWebView qui à l'intérieur d'un UIScrollView (scrollview contient un autre composant)

J'ai essayé d'activer le multitouch à la fois sur Interface Builder ou programmatique sur UIWebView mais il ne peut toujours pas zoomer pour le langage HTML. Dois-je gérer les deux zooms en même UIScrollView et UIWebView? Ou tout ce que je n'ai pas à régler?

132
calendarw

Vous DEVEZ définir scalesPageToFit = YES pour que le pincement et le zoom fonctionnent sur UIWebView.

347
john geshrick

OK, vous devez faire les deux choses ci-dessus, mais aussi les suivantes. J'avais une vue Web dans la vue principale et cela ne fonctionnait pas.

  1. Comme ci-dessus, vous devez d'abord placer UIScrollView dans la vue principale, puis la vue Web dans la vue en 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 méthode viewForZoomingInScrollView. Cela doit renvoyer le pointeur sur UIScrollView (renvoyer myScrollView).
  3. J'ai créé les propriétés IBOutlet pour la vue Web et la vue de défilement - les lier dans la NIB à votre contrôleur de vue.
  4. Dans la vue Défilement, accédez à l'inspecteur d'attributs, définissez vos facteurs de zoom maximum et minimum (je règle 0,5 à 5,0, cela fonctionne bien).
  5. Dans la vue Web, dans l'inspecteur d'attributs:
  6. Dans la section Web View, sélectionnez Scales Pages To Fit
  7. Dans la section Affichage, sélectionnez Mode, "En haut à gauche".
  8. Dans la section en bas, cochez la case Interaction utilisateur activée et Activation tactile multiple.
12
Jay Imerman

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

Disons que vous avez en <head>:

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

Pour effectuer un zoom sur 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";

Il est très important de changer la largeur - sinon Mobile Safari aurait de sérieux problèmes de repeinte (dus à une suroptimisation).

Vous ne pouvez pas simplement définir initial-scale _ encore une fois - il est ignoré la deuxième fois.

3
robocat

Vous devez implémenter la méthode viewForZoomingInScrollView dans votre contrôleur, sinon le zoom ne fera rien. (Je ne sais pas vraiment pourquoi cela devrait être nécessaire, mais voilà.)

Pour des informations détaillées, voir http://developer.Apple.com/iphone/library/documentation/WindowsViews/Conceptual/UIScrollView_pg/ZoomZoom/ZoomZoom.html .

2
apenwarr