2010-09-02 24 views
13

Na iPadzie prezentuję widok po stronie "szczegółowej" kontrolera widoku podzielonego, który jest w zasadzie po prostu plikiem UIWebView, który ładuje plik HTML w pakiecie aplikacji. Aplikacja obsługuje obrót i ukrywa/pokazuje "master" stronę podziału, stosownie do potrzeb.Obrót UIWebView na iPadzie

Po początkowym załadowaniu UIWebView w trybie poziomym jego zawartość wydaje się być "prawidłowo zwymiarowana" ... zawartość jest wyższa niż na ekranie, więc można przewijać w pionie, ale nie w poziomie. (Treść HTML jest prawie całkowicie napisana w stylu CSS, a na dole tylko mały obraz o wymiarach 300x50).

Jeśli następnie obrócisz ekran do pionu, treść HTML będzie nadal wyglądać dobrze - pionowy pasek przewijania jest obecny, ale nie poziomy, jak to było na początku. Wracając do krajobrazu i wszystko jest nadal brzoskwiniowe.

Jak dotąd, tak dobrze.

Teraz, jeśli UIWebView ładuje się początkowo w orientacji pionowej, wszystko jest również "prawidłowo dobrane" (pionowy pasek przewijania, bez poziomych). Jeśli jednak obrócisz go w pionowy, zawartość nagle uzyska poziomy pasek przewijania, ponieważ jeden z akapitów tekstu jest szerszy niż szerokość interfejsu UIWebView. (Nie jest przypadkiem, jestem pewien, ale to długi ustęp wielkości doskonale dla nieco większej szerokości UIWebView ma kiedy jest zorientowany jak portret.)

Spodziewałem/zakładając, że obracanie iPada spowodowałoby UIWebView do Zmieniaj rozmiar jego ramki, a gdy jest ona zmieniana, zmień odpowiednio jej zawartość HTML. (Pomyśl o wybraniu okna przeglądarki i zmniejszeniu go.) Dlaczego tak się nie dzieje?

Chciałbym uniknąć stosowania właściwości "Dopasuj strony do dopasowania", ponieważ tekst kurczy się niedeterministycznie.

+1

Natknąłem się na to dokładnie w tym samym numerze na drugi dzień, to się dzieje tylko wtedy, gdy aplikacja jest uruchomiona początkowo w orientacja pozioma, a następnie obrócona w tryb pionowy, po uruchomieniu w trybie portretowym ponownie zmienia rozmiar poprawnie, gdy zostanie obrócony do widoku poziomego. W moim przypadku jest to show-stopper, ponieważ moja zawartość to mapa (CloudMade) bez widocznych pasków przewijania, a znaczna część mapy kończy się poza ekranem, a środek mapy, gdy jest przesuwany do nowego LAT/Lng jest oczywiście poza centrum. Mam nadzieję, że jest jakiś obejście! – EagleOfToledo

+0

@EagleOfToledo Czy Twój widok treści to również "UIWebView"? –

+0

Tak, ale w moim przypadku UIWebView zajmuje cały ekran (brak SplitView/DetailView). – EagleOfToledo

Odpowiedz

29

Wystarczy rozwiązać mój problem z tym dodając ten HTML5 rzutni meta tag:

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

do sekcji head mojego HTML, może odmianą tej meta tagu może pomóc?

Mimo że mój problem został wywołany, gdy moja aplikacja została uruchomiona w trybie poziomym, podczas gdy w trybie portretu może to być najczęstsza przyczyna.

miałem też inną zabawną kwestię z Webview w iPadzie i wspólnego rozwiązania wydaje się, że tag:

iPad Simulator WebView/Google Maps API Issue

+0

Interesujące. Ponieważ ten HTML może być później używany w innych przeglądarkach/platformach, nie byłem pewien, czy dodać ten tag na początku. Ale jeśli uprościłbym to do 'content =" initial-scale = 1.0 "', powinno to być raczej łagodne. Dzięki! –

+0

Idealny. To działało dla mnie na iPadzie i iPhonie. –

+0

Dzięki. To zabawne, że usunięcie "width = device-width" rozwiązało mój problem. – wanghq

0

Możliwe jest również, aby poradzić sobie z tym poprzez umieszczenie

[myWebView przeładować];

do metody shouldAutorotateToInterfaceOrientation

- ale jeśli jesteś na połączenia 3G to może być powolna

+1

, a stracisz cały stan strony, nie zapisany w ciasteczkach/sesji;) – tuxSlayer

Powiązane problemy