La largeur de l'iPhone UIWebView ne convient pas après l'opération de zoom + Modification de l'interface UIInterface
J'ai créé un os à nu app iPhone avec une UIWebView (Échelles de Page pour s'Adapter = OUI, shouldAutorotateToInterfaceOrientation = OUI) et chargé d'une page web, par exemple https://stackoverflow.com/
La rotation de l'appareil montre que UIWebView est automatiquement redimensionnée pour s'adapter à la largeur. Bon.
Incorrect: Zoom dans la page et de faire un zoom arrière. Maintenant, la rotation de l'appareil montre UIWebView dans un drôle de largeur dans l'une de l'orientation (si u zoom dans le paysage, le portrait, la largeur est bizarre, vice-versa). Ce problème est résolu que lorsque vous accédez à une autre page.
Corriger: Charger la même URL dans le navigateur Safari Mobile. La rotation des œuvres & la largeur s'adapte quel que soit le zoom de l'exercice.
Est-ce une UIWebView bug (probablement pas)? Ou est-il quelque chose qui doit être fait pour rendre les choses "fonctionne" comme dans le navigateur Safari Mobile?
source d'informationauteur choonkeat | 2010-05-23
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé quelque chose qui a fonctionné pour moi. Le problème est que lorsque uiwebview de modifier son orientation des contenus web sont zoommed pour s'adapter à la fenêtre d'affichage. Mais zoomscale paramètre de la scrollview sous-vue n'est pas mis à jour correctement (ni sont mis à jour minimumZoomScale ni maximumZoomScale
Alors nous avons besoin de le faire manuellement
willRotateToInterfaceOrientation
:Espérons que cette aide!
J'ai essayé la solution de M Penades et cela semble fonctionner pour moi.
Le seul problème que je rencontre est que lors de l'exécution de ce sur un 3Gs, la rotation est malheureusement pas très lisse.
Je suis donc maintenant à l'aide d'une approche différente:
Cordialement,
Ralph
essayer ce code, il insignifiante changements de niveau de zoom (1.01) pour permettre UIWebView augmentation de la taille du contenu en mode paysage
findScrollViewInsideView: ajout de la méthode à l'appui de l'ios4
Je vous poste ça parce que j'ai aussi été confronté au même problème et je suis ici, à la suite de la
M Penades
Approche.M Penades
's Réponse woks seulement bonne pour les cas si l'utilisateur n'a pas d'Inclinaison(pincée) la Webview puis faites pivoter l'appareil et répétez ce processus .ensuite la Taille du Contenu de la UiwebView obtient réduire progressivement. c'était donc la question est venu dansM Penades
Réponse. j'ai donc résolu le problème de trop et mon code est comme ci-dessous.1) Pour Cela, j'ai mis le Geste de Pincement de sorte que lorsque l'Utilisateur de l'Inclinaison de La UIwebView pu vérifier à l'Échelle de la taille de la UIwebView.
//Un, Veuillez importer Les
UIGestureRecognizerDelegate
Protocole '.h fichier'Retour OUI, il est garanti à permettre la reconnaissance simultanée. le retour N'est pas garanti pour empêcher la reconnaissance simultanée, comme les autres geste de son délégué peut retourner OUI
Si l'Utilisateur Hase Pincement Dans/Hors de La Vue Web dans ce Cas il suffit de Définir Que l'agrandissement d'un Facteur .
De SORTE que WebView Pouvez Ajuster Sa ContentSize comme Oreintaion Changé.
Cela Fonctionne parfaitement, même pour l'utilisateur de l'inclinaison de la UIWebView.
J'ai une solution à ce problème, mais je dois dire que je ne suis pas un grand fan de lui. Il fonctionne très bien, mais la solution provoque effectivement un autre problème. J'ai un fix pour le secondaire, mais il faut un peu d'effort.
Il suffit de garder à l'esprit que, depuis OS3.2 ou iOS4 (pas sûr) UIWebView directe de sous-vue est maintenant UIScrollView au lieu de UIScroller, de sorte que l'on peut faire beaucoup plus avec elle. Également, car l'accès à la sous-vues de Vue n'est pas une action privée, ni à l'aide d'une sous-vue qui est coulé comme une documentation de vue, on peut faire beaucoup avec la UIWebView sans enfreindre les règles.
Nous avons d'abord besoin d'obtenir le UIScrollView de la UIWebview:
Nous devons maintenant modifier le délégué de la ce scrollview, de sorte que nous pouvons remplacer le scrollview délégué appels (ce qui peut effectivement être la cause d'un secondaire bug comme un résultat de cette solution, qui je vais partager un moment):
Maintenant, si vous essayez à ce point, le zoom est cassé. Nous avons besoin de mettre en œuvre un UIScrollViewDelegate méthode pour le résoudre. ajouter:
webBrowserView est en fait un UIWebBrowserView, mais ce n'est pas documentée de la classe, de sorte que nous sommes juste en train de la traiter comme une UIView.
Maintenant exécuter votre application, effectuer un zoom avant et zoom arrière de la page web. Faites tourner, et il devrait s'afficher correctement.
Cela ne cause un assez gros bug, c'est peut-être pire que l'original.
Si vous effectuez un zoom avant, puis tournez, vous perdrez le défilement de la capacité, mais la vue s'agrandir encore. Voici le correctif Pour compléter le tout.
Tout d'abord, nous avons besoin de garder une trace de quelques numéros, et de disposer d'un indicateur défini:
Je les ai définie dans mon h fichier:
Vous pouvez penser que vous pouvez simplement saisir ces numéros de UIScrollView, mais quand vous en avez besoin, ils ont changé, donc nous avons besoin d'eux stockées ailleurs.
Nous avons besoin d'utiliser une autre méthode du délégué:
Maintenant, il est dans un désordre que je ressens.
Nous avons besoin pour suivre la rotation, de sorte que vous aurez besoin de l'ajouter à votre viewDidLoad, loadView, ou quelle que soit la méthode que vous utilisez pour enregistrer les notifications:
et de créer cette méthode:
Alors maintenant, quand vous tournez webViewOrientationChange sera appelée. La raison performSelector est retardé de 0.0 secondes est parce que nous voulons appeler adjustWithZoomData sur la prochaine runloop. Si vous l'appelez directement le adjustWithZoomData permettra d'ajuster l'orientation précédente.
Ici est la adjustWithZoomData méthode:
C'est tout! Maintenant, quand vous la faites tourner, pour maintenir le zoom, et à peu près à maintenir le bon décalage. Si quelqu'un veut faire le calcul sur la façon d'obtenir le exacte décalage alors foncez!!!!
Je cherchais en moi-même et trouvé quelques informations supplémentaires:
Problèmes lors des changements de zoom:
par exemple, si la largeur est de 1024 et que vous souhaitez agrandir de 1 à 1,5 dans le paysage, vous pouvez:
Donc, apparemment, je n'avais pas l'utilisation de la solution par M Penades à la fin (et j'ai oublié de mettre à jour ce post! désolé).
Ce que j'ai fait était pour redimensionner le document en entier (et changer ma police-taille de garder les choses proportionnelle). Qui apparemment résolu le problème.
Cependant, mon UIWebView est uniquement pour le chargement de mon propre HTML & CSS à partir de l'iOS système de fichiers - si vous êtes la construction d'un usage général, navigateur web, cette astuce peut ne pas fonctionner aussi bien.
ViewController.m
Et app.css
Gist à https://gist.github.com/d6589584944685909ae5
Sur la rotation, essayez de définir la scrollView zoomScale à 0.
Voir ma réponse ici: UIWebView contenu n'est pas ajusté à la nouvelle image après rotation