2010-09-02 23 views
13

Sull'iPad, presento una vista nel lato "dettagli" di un controller di visualizzazione divisa che è fondamentalmente solo un UIWebView, che carica un file HTML nel pacchetto dell'applicazione. L'applicazione supporta la rotazione e nasconde/mostra il lato "master" della suddivisione in modo appropriato.Rotazione UIWebView su iPad

Quando lo UIWebView viene inizialmente caricato in modalità orizzontale, il suo contenuto sembra essere "dimensionato" correttamente ... il contenuto è più alto dello schermo, quindi è possibile scorrere verticalmente, ma non orizzontalmente. (Il contenuto HTML è quasi tutto in stile testo con CSS, con solo una piccola immagine ~ 300x50 in fondo.)

Se si ruota lo schermo in verticale, il contenuto HTML sembra ancora ridimensionato - barra di scorrimento verticale è presente, ma non orizzontale, come era inizialmente. Rotazione di nuovo al paesaggio e tutto è ancora peachy.

Finora, tutto bene.

Ora, se lo UIWebView inizialmente viene caricato con orientamento verticale, anche tutto viene "dimensionato" correttamente (barra di scorrimento verticale, senza orizzontale). Ma se lo si ruota in orizzontale, il contenuto ottiene improvvisamente una barra di scorrimento orizzontale, perché uno dei paragrafi di testo è più largo della larghezza di UIWebView. (Non a caso, ne sono sicuro, ma che a lungo paragrafo è di dimensioni perfettamente per la larghezza leggermente più grande del UIWebView ha quando è orientato come ritratto.)

mi aspettavo/ipotizzando che la rotazione del iPad causerebbe il UIWebView a avere ridimensionato il frame e ridimensionarlo in modo appropriato quando viene ridimensionato. (Pensa di prendere una finestra del browser Web e ridurla.) Perché non sta succedendo per me?

Vorrei evitare di utilizzare la proprietà "Adatta le pagine alle dimensioni" perché il testo si restringe in modo non deterministico.

+1

sono imbattuto in questo esatto lo stesso problema, l'altro giorno, succede solo quando l'applicazione viene avviata inizialmente in l'orientamento orizzontale e quindi ruotato in modalità verticale, se lanciato in modalità verticale viene ridimensionato correttamente quando ruotato in vista orizzontale. Nel mio caso è uno show-stopper perché il mio contenuto è una mappa (CloudMade) senza barre di scorrimento mostrate e una buona parte della mappa finisce per essere fuori dallo schermo e il centro della mappa quando viene spostato su un nuovo Lat/Lng è ovviamente fuori centro. Spero che ci sia qualche soluzione! – EagleOfToledo

+0

@EagleOfToledo La vista del contenuto è anche un 'UIWebView'? –

+0

Sì, ma nel mio caso UIWebView occupa l'intero schermo (senza SplitView/DetailView). – EagleOfToledo

risposta

29

appena risolto il mio problema con questo aggiungendo questo HTML5 Finestra meta tag:

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

alla sezione di testa del mio HTML, forse una variazione di questo meta-tag può aiutare?

Anche se il mio problema è stato attivato quando la mia app è stata avviata in modalità orizzontale, mentre la tua in modalità verticale, potrebbe essere una causa comune.

ho avuto anche un altro problema divertente con la WebView in iPad e la soluzione comune sembra essere che il meta tag:

iPad Simulator WebView/Google Maps API Issue

+0

Interessante. Poiché questo HTML potrebbe essere utilizzato in altri browser/piattaforme in seguito, non ero sicuro di aggiungere questo tag all'inizio. Ma se lo semplifichi a solo 'content =" initial-scale = 1.0 "', dovrebbe essere piuttosto benigno. Grazie! –

+0

Perfetto. Questo ha funzionato per me sia su iPad che su iPhone. –

+0

Grazie. È divertente che la rimozione di "width = device-width" abbia risolto il mio problema. – wanghq

0

E 'anche possibile affrontare questo mettendo

[myWebView ricaricare];

nel metodo shouldAutorotateToInterfaceOrientation

- ma se siete su una connessione 3G può essere lento

+1

e perderai tutto lo stato della pagina non salvato in cookie/sessione;) – tuxSlayer

Problemi correlati