2010-08-05 2 views
1

J'ai un UIWebView dans lequel l'utilisateur peut parcourir un tas de fichiers HTML stockés et liés localement. Tout fonctionne bien et bien, sauf dans ce cas particulier:iPhone dev: UIWebview déplace l'emplacement vertical lors de la rotation de l'appareil

  • utilisateur accède à une page avec un fragment pointant vers le chapitre 3, ce qui provoque (correctement) le navigateur pour rendre le HTML à partir du point d'ancrage du fragment et en avant.
  • L'utilisateur défile un peu plus bas, par exemple au chapitre 4.
  • L'utilisateur fait pivoter l'appareil en mode paysage.
  • Le UIWebView saute maintenant de retour et montre le chapitre 3.

Donc, ma question est: Est-il possible de faire UIWebView afficher les utilisateurs dernier emplacement dans le document, même si l'utilisateur fait défiler et/ou tourne l'appareil pendant la navigation?

Répondre

4

Je suppose que la raison en est que le défilement reste à la même position de pixel, au lieu d'être proportionnel à la hauteur de la page. Ainsi, lorsque l'utilisateur dispose de l'appareil en mode paysage, la largeur de la page augmente et la hauteur de la page diminue.

Vous pouvez utiliser JavaScript pour faire défiler la page proportionnellement lorsque l'orientation change, c'est-à-dire utiliser [webView stringByEvaluatingJavaScriptFromString:]. Voici le code pseudo:

Juste avant le changement d'orientation:

  1. int oldVerticalPosition = position de défilement vertical forment le haut de la page
  2. int olePageHeight = la hauteur de la page entière

Après changement d'orientation:

  1. newPageHeight = la hauteur de l'ensemble du pa ge
  2. faire défiler la page à newPageHeight * (oldVerticalPosition/oldPageHeight)

This page donne quelques exemples de code.

+0

Bonne réflexion! Cela s'est avéré fonctionner comme un charme! Pour obtenir la position verticale avant la rotation, j'ai dû définir oldVerticalPosition et oldPageHeight dans shouldAutorotateToInterfaceOrientation. – thomax

+0

heureux que cela a fonctionné! :) Je viens de relire mon message et j'ai vu quelques erreurs ... Bien que vous ayez encore du succès. –

Questions connexes