Come posso abilitare lo zoom su UIWebView che all'interno di UIScrollView?


132

Ne ho una UIWebViewall'interno di una UIScrollView(scrollview contiene un altro componente)

Ho provato ad abilitare il multitouch sia su Interface Builder che su Programmatic , UIWebViewma non è ancora possibile eseguire lo zoom per HTML, devo gestire entrambi gli zoom in UIScrollViewe UIWebView? O qualcosa che non devo impostare?


2
scalesPageToFit = YESfunziona ma cambia la dimensione del contenuto predefinito, guarda la mia risposta che ti sarà utile.
iPatel

Risposte:


348

È NECESSARIO impostare scalesPageToFit = YES affinché qualsiasi pizzicamento e zoom funzionino su un UIWebView


2
Questo va bene, tranne per il fatto che la mia pagina viene ridimensionata per adattarsi alla vista. Sto creando una pagina html in codice da visualizzare e voglio che rimanga alle dimensioni precedenti, ma consento ai miei utenti di ingrandire con lo zoom con pizzico
Dan F

33
Aggiungi il seguente metatag alla testa del tuo documento HTML: <meta name = 'viewport' content = 'initial-scale = 1.0, maximum-scale = 10.0' />
vocaro

2
Come posso fare la stessa cosa con un sito Web esterno? Cioè, ho impostato lo zoom iniziale e lo zoom utente è attivato dopo.
William Jockusch,

Ciao, funziona tutto perfettamente Paging, ZoomIn / Out, ecc ... Ma ho un problema in questo. La mia app funziona in entrambi gli orientamenti (verticale e orizzontale). Ora, in verticale, devo scorrere la pagina 2-3 volte, quindi posso andare alla pagina successiva. Ma nel panorama, funziona bene. Ho preso webview dentro scrollview e scrollview hanno il paging. Ma quando ho provato a scorrere lo scorrimento per passare alla pagina successiva, devo scorrere da 2 a 3 volte per passare alla pagina successiva (in modalità verticale). Qualche idea riguardo lo stesso. Grazie per l'aiuto.
Nishant B,

risposta perfetta ... Grazie
AL̲̳I

12

OK, devi fare sia quanto sopra, ma anche quanto segue. Avevo una vista web nella vista principale e non funzionava.

  1. Come sopra, devi prima mettere un UIScrollView nella vista principale, quindi mettere la vista web nella vista di scorrimento.
  2. Come sopra, implementare <UIScrollViewDelegate>nel controller della vista, trascinare il delegato della vista di scorrimento sul controller della vista in Interface Builder e implementare il viewForZoomingInScrollViewmetodo. Questo deve restituire il puntatore a UIScrollView (restituire myScrollView).
  3. Ho creato le proprietà IBOutlet sia per la vista Web che per la vista di scorrimento: collegale nel NIB al controller della vista.
  4. Nella vista di scorrimento, vai a Impostazioni Attributi, imposta i fattori di zoom Max e Min (ho impostato da 0,5 a 5,0, che funziona bene).
  5. Nella vista Web, nella finestra di ispezione degli attributi:
  6. Nella sezione Visualizzazione Web, seleziona Adatta le pagine per adattarle
  7. Nella sezione Visualizza, seleziona Modalità, "In alto a sinistra"
  8. Nella sezione Visualizza in basso, seleziona Interazione utente abilitata e Abilita tocco multiplo

3

Con JavaScript puoi controllare il livello di zoom, anche se la soluzione oly che ho trovato non sembra liscia.

Dì che hai in <head>:

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

Per ingrandire a 4x e consentire comunque all'utente di cambiare lo zoom, cambia due volte il contenuto:

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";

La modifica della larghezza è molto importante, altrimenti Mobile Safari presenta gravi bug di ridipintura (a causa di un'ottimizzazione eccessiva).

Non puoi semplicemente impostare di initial-scalenuovo: viene ignorato la seconda volta.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.