2010-07-23 11 views
9

Ho cercato la scorsa settimana per la risposta a questa domanda.Come resettare lo zoom di UIWebView? Sto già usando scalePagesToFit = YES;

Ho un UIWebView, all'interno di un UIScrollView. Tutto funziona alla grande, ma voglio che il contenuto di UIWebView ripristini il suo zoom, quando l'orientamento cambia.

Nell'HTML all'interno di UIWebView, ho impostato la larghezza del viewport (con un meta tag) su "device-width" e quindi sul lato Obj-C, ho impostato le scalePagesToFit = YES;

Ho provato a reimpostare lo zoom con javascript; sostituendo i meta tag in runtime; ricarico; accedere a UIScrollView all'interno di UIWebView; ecc ...

ma senza successo.

Qualcuno di voi conosce una soluzione?

L'unico che mi viene in mente fuori è quello di ricreare l'UIWebViews ogni volta che si cambia l'orientamento, ma che li rende lampeggiano al bianco, mentre il contenuto di rendering, che sembra terribile :(

Qualche idea?

molte grazie, Andre

+0

Forse il trucco sta nella ricostruzione delle visualizzazioni Web? L'ho provato, ma lampeggiano in bianco, a causa di quel momento nel quale perdono il loro contenuto, quindi non sembra fantastico. Altre soluzioni alternative? – Andre

+0

Girato al buio, ma penso che la versione mobile del sito di wikipedia lo faccia. Si potrebbe prendere un picco al suo html/javascript. – Douglas

risposta

8

sto solo indovinando qui e non ho provato, ma per quanto ne so un UIWebView ha un figlio UIScrollView Quindi si dovrebbe essere in grado di fare:.

for (UIScrollView *scroll in [myWebView subviews]) { 
    // Make sure it really is a scroll view and reset the zoom scale. 
    if ([scroll respondsToSelector:@selector(setZoomScale:)]) 
     [scroll setZoomScale:1.0]; 
} 
+0

Sai se questo avrebbe superato l'approvazione dell'App Store, o si tratta di un'API privata? Cheers, Andre – Andre

+1

Questo dovrebbe essere perfettamente bene. Ho visto un articolo che utilizza la stessa tecnica per disattivare il rimbalzo della vista quando raggiunge la fine. Qui vengono utilizzate solo API pubbliche, quindi nulla di cui lamentarsi Apple. Se Apple decide di cambiare UIWebView per non utilizzare più un figlio UIScrollView, questo codice non si blocca, ma semplicemente non resetterà più lo zoom. – DarkDust

+1

Fresco. Solo per quello che sai, ho provato questo codice prima e non ha funzionato. Ho scoperto che per farlo funzionare (nel mio caso) è necessario prima sostituire i meta tag nell'HTML, per riportare la scala massima della vista su 1.0, quindi chiamare setZoomScale. – Andre

1

Se si vuole fare a livello di codice questo è l'unico modo che ho trovato per realizzarlo: (specificare i propri formati, se lo si desidera, stavo cercando di diminuire dopo aver digitato in un campo modulo)

UIScrollView *sv = [[webViewView subviews] objectAtIndex:0]; 
[sv zoomToRect:CGRectMake(0, 0, sv.contentSize.width, sv.contentSize.height) animated:YES]; 
1

Aggiornamento: downscaling non funzionava correttamente quando si utilizza

[[[webView subviews] lastObject] setZoomScale:0.25]; 

la qualità delle immagini viene ridimensionato sulla pagina era terribile. Doing:

[[[webView subviews] lastObject] setZoomScale:0.25 animated:YES]; 

Risolto. Quindi quell'ultima riga è quella che potresti usare.

webView è stato sottoclasse di un UIWebView che si trova su alcuni file IB. Non ho usato affatto il Viewport. Trovo che uno dovrebbe scegliere facendo questo dal lato Cocoa Touch o utilizzare JS.

ho usato:

webView.scalesPageToFit = YES; 

Mi chiedo se c'è un modo di resettare lo scalesPageToFit.

3

Su iOS 5+ è possibile accedere a scrollView. Basta fare:

[webView.scrollView setZoomScale: 1.0];

+0

funziona bene, grazie. questo è molto più semplice del ciclo for. ma come @Andre ha detto in un commento sulla risposta accettata, è necessario prima sostituire i meta tag nell'HTML per cambiare la scala massima della viewport a 1.0 –

0

Adattamento dalla risposta di Captnwalker1, sono arrivato fino a questo:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    if(toInterfaceOrientation ==UIInterfaceOrientationPortrait||toInterfaceOrientation==UIInterfaceOrientationMaskPortraitUpsideDown) 
    { 
     currentScrollView = [[webView subviews] objectAtIndex:0]; 
     [currentScrollView zoomToRect:CGRectMake(0, 0, currentScrollView.contentSize.width, currentScrollView.contentSize.height) animated:NO]; 
    } 
    else 
    { 
     currentScrollView = [[webView subviews] objectAtIndex:0]; 
     [currentScrollView zoomToRect:CGRectMake(0, 0, currentScrollView.contentSize.width, currentScrollView.contentSize.height) animated:NO]; 
    } 
} 

Quindi caricare la vostra immagine WebView, e l'immagine sarà ripristinare la sua dimensione quando viene ruotato.

Problemi correlati