2010-09-02 13 views
13

Sur l'iPad, je présente une vue dans le côté «détail» d'un contrôleur de vue partagée qui est essentiellement un UIWebView, qui charge un fichier HTML dans l'ensemble d'applications. L'application prend en charge la rotation et cache/affiche le côté «maître» de la division selon le cas. Lorsque le UIWebView est initialement chargé en mode paysage, son contenu semble être "dimensionné" correctement ... le contenu est plus grand que l'écran, vous pouvez donc faire défiler verticalement, mais pas horizontalement. (Le contenu HTML est presque tout texte avec CSS, avec seulement une petite image ~ 300x50 en bas.)Rotation UIWebView sur iPad

Si vous faites ensuite pivoter l'écran en mode portrait, le contenu HTML semble toujours être de taille OK - barre de défilement verticale est présent, mais pas horizontal, comme il était initialement. Retournant au paysage et tout est encore pêché.

Jusqu'ici, tout va bien.

Maintenant, si le UIWebView se charge initialement en orientation portrait, tout est également "dimensionné" correctement (barre de défilement verticale, pas d'horizontale). Mais, si vous le faites pivoter en mode paysage, le contenu reçoit soudainement une barre de défilement horizontale, car l'un des paragraphes du texte est plus large que la largeur de l'UIWebView. (Pas par hasard, je suis sûr, mais ce long paragraphe est de taille parfaitement pour la largeur légèrement plus la UIWebView a quand il est orienté comme portrait.)

Je me attendais/en supposant que la rotation de l'iPad causerait la UIWebView à avoir son cadre être redimensionné, et quand il est redimensionné, de redimensionner également son contenu HTML de manière appropriée. (Pensez à prendre une fenêtre de navigateur Web et à la réduire.) Pourquoi cela ne se passe-t-il pas pour moi?

Je voudrais éviter d'utiliser la propriété "Scales Pages to Fit" car le texte se contracte de façon non déterministe.

+1

suis tombé sur cette même question exactement l'autre jour, il ne se produit que lorsque l'application est lancée initialement dans l'orientation paysage, puis tourné en mode portrait, s'il est lancé en mode portrait, il redimensionne correctement lorsqu'il est tourné en mode paysage. Dans mon cas, c'est un show-stopper parce que mon contenu est une carte (CloudMade) sans barre de défilement montrée et une bonne partie de la carte finit hors de l'écran et le centre de la carte quand il est tourné vers un nouveau Lat/Lng est évidemment décentré. J'espère qu'il y a une solution de contournement! – EagleOfToledo

+0

@EagleOfToledo Votre contenu est-il également un "UIWebView"? –

+0

Oui, mais dans mon cas, l'UIWebView occupe tout l'écran (pas de SplitView/DetailView). – EagleOfToledo

Répondre

29

Juste résolu mon problème avec ceci en ajoutant cette balise HTML5 Viewport meta:

<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 

à la section de la tête de mon HTML, peut-être une variante de cette balise meta peut aider?

Bien que mon problème ait été déclenché lorsque mon application a été démarrée en mode paysage, alors que la vôtre est en mode portrait, elle peut être une cause fréquente.

J'ai eu aussi une autre question drôle avec WebView dans l'iPad et la solution commune semble être que la balise meta:

iPad Simulator WebView/Google Maps API Issue

+0

Intéressant. Étant donné que ce code HTML pourrait être utilisé dans d'autres navigateurs/plateformes plus tard, je n'étais pas sûr d'ajouter cette balise au début. Mais si je simplifie à juste 'content =" initial-scale = 1.0 "', il devrait être plutôt bénin. Merci! –

+0

Parfait. Cela a fonctionné pour moi sur iPad et iPhone. –

+0

Merci. C'est drôle que de supprimer "width = device-width" a résolu mon problème. – wanghq

0

Il est également possible de régler ce problème en mettant

[myWebView recharger];

dans la méthode shouldAutorotateToInterfaceOrientation

- mais si vous êtes sur une connexion 3G, cela peut être lent

+1

et vous perdrez tout l'état de la page non enregistré dans les cookies/session;) – tuxSlayer