Jak mogę włączyć powiększanie w UIWebView, który znajduje się w UIScrollView?

132

Mam UIWebViewktóry wewnątrz UIScrollView(widok przewijania zawiera inny komponent)

Próbowałem włączyć multitouch zarówno na konstruktorze Interface lub programowej na UIWebViewale nadal nie można powiększyć do html, muszę obsługiwać zarówno powiększanie u UIScrollViewi UIWebView? Albo coś, czego nie ustawiłem?

kalendarz
źródło
2
scalesPageToFit = YESdziała, ale zmienia domyślny rozmiar treści, spójrz na moją odpowiedź, która będzie dla ciebie pomocna.
iPatel

Odpowiedzi:

348

MUSISZ ustawić scalesPageToFit = YES dla dowolnego szczypania i powiększania, aby działało na UIWebView

john geshrick
źródło
2
To dobrze, z wyjątkiem tego, że teraz moja strona jest zmniejszana, aby pasowała do widoku. Tworzę stronę html w kodzie do wyświetlenia i chcę, aby pozostała w poprzednim rozmiarze, ale pozwalam moim użytkownikom na powiększanie za pomocą szczypania
Dan F
33
Dodaj następujący metatag do głowy dokumentu HTML: <meta name = 'viewport' content = 'initial-scale = 1.0, maximum-scale = 10.0' />
vocaro
2
Jak mogę zrobić to samo z zewnętrzną witryną internetową? Oznacza to, że ustawiam początkowe powiększenie, a następnie powiększanie użytkownika jest włączone.
William Jockusch
Cześć, wszystko działa dobrze. Paging, ZoomIn / Out, etc ... Ale mam w tym jeden problem. Moja aplikacja działa w obu orientacjach (pionowa i pozioma). Teraz w portrecie muszę przesuwać stronę 2-3 razy, aby przejść do następnej strony. Ale w krajobrazie działa dobrze. Zrobiłem webview w scrollview i scrollview mam stronicowanie. Ale kiedy próbowałem przesunąć suwak, aby przejść do następnej strony, muszę przesunąć go 2 do 3 razy, aby przejść do następnej strony (w trybie portretowym). Każdy pomysł dotyczący tego samego. Dzięki za pomoc.
Nishant B
doskonała odpowiedź ... Dzięki
AL̲̳I
12

OK, musisz wykonać oba powyższe, ale także poniższe. Miałem widok sieciowy w głównym widoku, ale to nie zadziałało.

  1. Jak powyżej, najpierw musisz umieścić UIScrollView w głównym widoku, a następnie umieścić widok sieciowy w widoku przewijania.
  2. Jak powyżej, zaimplementuj <UIScrollViewDelegate>w kontrolerze widoku, przeciągnij delegata widoku przewijania do kontrolera widoku w programie Interface Builder i zaimplementuj viewForZoomingInScrollViewmetodę. To musi zwrócić wskaźnik do UIScrollView (zwrócić myScrollView).
  3. Utworzyłem właściwości IBOutlet zarówno dla widoku internetowego, jak i widoku przewijania - połącz je w NIB z kontrolerem widoku.
  4. W widoku przewijania przejdź do Inspektora atrybutów, ustaw maksymalne i minimalne współczynniki powiększenia (ustawiłem 0,5 na 5,0, to działa dobrze).
  5. W widoku sieci Web w Inspektorze atrybutów:
  6. W sekcji Widok internetowy wybierz opcję Dopasuj strony do rozmiaru
  7. W sekcji Widok wybierz Tryb „Lewy górny”
  8. W sekcji Widok u dołu zaznacz opcję Interakcja z użytkownikiem włączona i Wielodotykowa włączona
Jay Imerman
źródło
3

Za pomocą JavaScript możesz kontrolować poziom powiększenia, chociaż rozwiązanie, które znalazłem, nie wygląda gładko.

Powiedz, że masz w <head>:

<meta id="vp" name="viewport" content="width=768,initial-scale=1.0">

Aby powiększyć do 4x i nadal pozwolić użytkownikowi na zmianę powiększenia, zmień zawartość dwukrotnie:

var vp = document.getElementById('vp');
vp.content = "width=767,minimum-scale=4.0,maximum-scale=4.0,user-scalable=yes";
vp.content = "width=768,minimum-scale=0.25,maximum-scale=10.0,user-scalable=yes";

Przełączanie szerokości jest bardzo ważne - w przeciwnym razie Mobile Safari ma poważne błędy związane z przemalowywaniem (z powodu nadmiernej optymalizacji).

Nie możesz tak po prostu ustawić initial-scaleponownie - za drugim razem jest to ignorowane.

robocat
źródło