2012-01-30 14 views

Respuesta

62

Esto funciona para mí:

UIScrollView *scrollView = [webView.subviews objectAtIndex:0]; 
scrollView.delegate = self;//self must be UIScrollViewDelegate 

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { 
    return nil; 
} 

ACTUALIZACIÓN: Para iOS 5 o superior ScrollView obtener de esta manera:

webview.scrollView.delegate = self; 
+0

Excelente solución, funciona perfectamente y utiliza una instrucción if en el método, puede elegir devolver 'nil' o reenviar el mensaje a' super', en cuyo caso se vuelve a habilitar el zoom (dependiendo del contenido que se muestre). –

+4

A partir de iOS 5 puede usar 'webView.scrollView.delegate = self;'. – Dev

+0

¡Muchas gracias realmente me ayudó mucho! –

4

Hay una propiedad llamada scrollView en UIWebView. A través de esto puedes definir esto. Para ser más específico que debe tener este aspecto:

myWebView.scrollView.minimumZoomScale = 1.0; 
myWebView.scrollView.maximumZoomScale = 1.0; 
+2

incorrecto el zoom sigue ahí, incluso si establece los niveles de zoom a 1.0 –

+4

Esto realmente funciona si se coloca en '- (void) webViewDidFinishLoad: (UIWebView *) webView' de la función de delegado de la vista web –

+1

Lo siento, esto simplemente no funciona para mí, incluso si se coloca en webViewDidFinishLoad. –

3

Desde el Apple Documentation:

scalesPageToFit

Un valor booleano que determina si la página web de tamaño para ajustarse a la vista y la el usuario puede cambiar la escala.

@property (no atómica) BOOL scalesPageToFit

Discusión

En caso afirmativo, la página web se escala a la medida y el usuario puede acercar y alejar a cabo. Si NO, el zoom del usuario está desactivado. El valor predeterminado es no.

Así que si quiere cambiar ese comportamiento, probablemente tendrá que subclase UIWebView.

2

Editar: implementar el método delegado

- (void)webViewDidFinishLoad:(UIWebView *)webView 

Para su vista web y en ella añadir folowing código:

[webView stringByEvaluatingJavaScriptFromString: @"$('body').bind('touchmove', function(event) { event.preventDefault() });"]; 

El problema es que esto también desactiva el desplazamiento, ya que deshabilita el movimiento de toque. Si desea mantener el rollo que tiene que escribir un script de Java que se sobreponen a la etiqueta meta de visualización con:

<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"> 
+0

no ayudó, sigue siendo zoomable – Jim

+0

Parece que estás escribiendo, estoy buscando una solución y voy a editar –

+0

Esto funcionó para mí en iOS 5. –

12

En lugar de utilizar

UIScrollView *scrollView = [webView.subviews objectAtIndex:0]; 
scrollView.delegate = self;//self must be UIScrollViewDelegate 

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { 
return nil; 
} 

Puede utilizar este:

webview.scrollView.delegate = self; 

-(UIView*)viewForZoomingInScrollView:(UIScrollView*)scrollView { 
return nil; 
} 

La segunda opción es mejor y prueba completa. La primera lógica podría fallar en futuros SDK.

0

por lo que funciona en mí:

NSString *fullURL = @"http://google.com"; 
NSURL *url = [NSURL URLWithString:fullURL]; 
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 
_webView.scrollView.scrollEnabled = TRUE; 
_webView.contentMode = UIViewContentModeScaleAspectFit; 
_webView.scalesPageToFit = FALSE; 
[_webView loadRequest:requestObj]; 
Cuestiones relacionadas