¿Cómo puedo habilitar el acercamiento en UIWebView que está dentro de UIScrollView?

132

Tengo un UIWebViewque dentro de UIScrollView(la vista de desplazamiento contiene otro componente)

Probé para permitir multitouch tanto en Interface Builder o programático sobre UIWebViewpero todavía no puedo hacer un zoom para html, ¿necesito para manejar tanto el zoom in en el UIScrollViewy UIWebView? ¿O algo que no tenga que configurar?

calendarw
fuente
2
scalesPageToFit = YESfunciona pero cambia el tamaño de contenido predeterminado. Mira mi respuesta, esto te será útil.
iPatel

Respuestas:

348

DEBE establecer scalePageToFit = YES para que cualquier pellizco y zoom funcione en un UIWebView

john geshrick
fuente
2
Esto es bueno, excepto que ahora mi página se está reduciendo para ajustarse a la vista. Estoy creando una página html en código para mostrar, y quiero que permanezca en el tamaño anterior, pero permitir a mis usuarios acercar con un pellizco de zoom
Dan F
33
Agregue la siguiente metaetiqueta al encabezado de su documento HTML: <meta name = 'viewport' content = 'initial-scale = 1.0, maximum-scale = 10.0' />
vocaro
2
¿Cómo puedo hacer lo mismo con un sitio web externo? Es decir, configuro el zoom inicial, y el zoom del usuario se habilita después de eso.
William Jockusch el
Hola, todo funciona bien Paginación, Zoom In / Out, etc. Pero tengo un problema en eso. Mi aplicación funciona en ambas orientaciones (vertical y horizontal). Ahora, en vertical, tengo que deslizar la página 2-3 veces y luego puedo ir a la página siguiente. Pero en el paisaje, está funcionando bien. He tomado webview dentro de scrollview y scrollview tiene paginación. Pero cuando intenté deslizar el desplazamiento para ir a la página siguiente, entonces tengo que deslizarlo de 2 a 3 veces para ir a la página siguiente (en modo vertical). Cualquier idea sobre lo mismo. Gracias por la ayuda.
Nishant B
respuesta perfecta ... Gracias
AL̲̳I
12

OK, debes hacer lo anterior, pero también lo siguiente. Tenía una vista web en la vista principal, y eso no funcionó.

  1. Como se indicó anteriormente, primero debe colocar un UIScrollView en la vista principal, luego colocar la vista web en la vista de desplazamiento.
  2. Como se indicó anteriormente, implemente <UIScrollViewDelegate>en su controlador de vista, arrastre el delegado de vista de desplazamiento al controlador de vista en Interface Builder e implemente el viewForZoomingInScrollViewmétodo. Esto debe devolver el puntero a UIScrollView (return myScrollView).
  3. Creé las propiedades de IBOutlet tanto para la vista web como para la vista de desplazamiento: vincúlelas en la NIB a su controlador de vista.
  4. En la Vista de desplazamiento, vaya al Inspector de atributos, configure sus factores de zoom Máx. Y Mín. (Configuré 0.5 a 5.0, eso funciona bien).
  5. En la Vista web, en el Inspector de atributos:
  6. En la sección Vista web, seleccione Escalar páginas para ajustar
  7. En la sección Ver, seleccione Modo, "Arriba a la izquierda"
  8. En la sección Ver en la parte inferior, marque Interacción del usuario habilitada y Múltiple toque habilitado
Jay Imerman
fuente
3

Con JavaScript puedes controlar el nivel de zoom, aunque la solución que he encontrado no se ve suave.

Digamos que tienes en <head>:

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

Para hacer zoom a 4x y aún permitir que el usuario cambie el zoom, cambie el contenido dos veces:

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

Alternar el ancho es muy importante; de ​​lo contrario, Mobile Safari tiene errores graves de repintado (debido a una optimización excesiva).

No puede simplemente configurar de initial-scalenuevo, se ignora la segunda vez.

robocat
fuente