2012-01-30 11 views

risposta

62

questo funziona per me:

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

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

UPDATE: Per iOS 5 o superiore ottenere ScrollView come questo:

webview.scrollView.delegate = self; 
+0

Ottima soluzione, funziona perfettamente e usando un'istruzione if nel metodo, puoi scegliere di restituire 'nil' o inoltrare il messaggio a' super', nel qual caso lo zoom viene riattivato (a seconda del contenuto che stai visualizzando). –

+4

A partire da iOS 5 è possibile utilizzare 'webView.scrollView.delegate = self;'. – Dev

+0

Grazie mille mi ha davvero aiutato molto! –

4

C'è una proprietà chiamata scrollView in UIWebView. Attraverso di esso puoi definire questo. Per essere più precisi si dovrebbe assomigliare a questa:

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

sbagliato lo zoom è ancora lì, anche se si imposta i livelli di zoom a 1.0 –

+4

Questo in realtà funziona se messo in '- (void) webViewDidFinishLoad: (UIWebView *) webView' della funzione delegate della webview –

+1

Spiacente, questo non funziona per me, anche se inserito in webViewDidFinishLoad. –

3

Dal Apple Documentation:

scalesPageToFit

Un valore booleano che determina se la pagina web in scala per adattarsi alla vista e la l'utente può cambiare la scala.

@property (nonatomic) BOOL scalesPageToFit

Discussione

Se SI, la pagina web viene adattato e l'utente può ingrandire e ridurre fuori. Se NO, lo zoom dell'utente è disabilitato. Il valore predefinito è no.

Quindi, se si desidera modificare tale comportamento, sarà probabilmente necessario sottoclasse UIWebView.

2

Edit: Implementare metodo delegato

- (void)webViewDidFinishLoad:(UIWebView *)webView 

per la visualizzazione web e in essa aggiunge folowing codice:

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

Il problema è questo disattivare anche la pergamena, perché disattiva la mossa di toccare. Se si desidera mantenere il rotolo è necessario scrivere uno script Java che sovrascriverà il meta tag viewport con:

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

non ha aiutato, è ancora zoomabile – Jim

+0

Sembra che tu stia scrivendo, sto cercando una soluzione e io modificherò –

+0

Questo ha funzionato per me su iOS 5. –

12

Invece di usare

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

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

È possibile utilizzare questo:

webview.scrollView.delegate = self; 

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

Seconda opzione è migliore e pieno-prova. La prima logica potrebbe fallire nei futuri SDK.

0

quindi funziona su di me:

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]; 
Problemi correlati