2011-10-09 10 views
7

Ho un UIWebView all'interno di UIScrollView.come inoltrare UIWebView scorrere fino a UIScrollView? (condizionatamente)

Questo idea è quella di essere in grado di creare più spazio di lettura sullo schermo quando l'utente scorrere la pagina web verso l'alto - scorrendo l'UIScrollView verso l'alto fino a quando la barra degli strumenti è visibile, e, ovviamente, quando le barre degli strumenti è nomore visibile in realtà scorrere la pagina web per mostrare più contenuti presenti nella pagina.

Il browser Safari IPhone fa esattamente la stessa funzionalità.

vedere lo screenshot (primo) per il comportamento predefinito che sto ottenendo - credo perché: il messaggio di scorrimento viene utilizzato dalla visualizzazione Web poiché il tocco/scorrimento avviene direttamente nell'area webview.

quello che mi piacerebbe fare qui è programmare decidere quando inoltrare la "scroll verso l'alto" verso l'UIScrollivew e quando no.

Qualsiasi suggerimento su come aggirare questo sarà così utile. Grazie!!

enter image description here

enter image description here

risposta

0

È possibile aggiungere un searchbox e UIWebView in un UIScrollView uno sotto l'altro. Per ottenere l'offset del contenuto quando scorri la pagina Web puoi utilizzare il seguente frammento di codice.

UIScrollView* currentScrollView; 
for (UIView* subView in testWebView.subviews) { 
    if ([subView isKindOfClass:[UIScrollView class]]) { 
     currentScrollView = (UIScrollView*)subView; 
     currentScrollView.delegate = (id)self; 
    } 
} 

Ora è possibile modificare il valore y del compensato tuo ScrollView base per il valore di offset si ottiene dal metodo delegato ScrollView didscroll.

2

Il UIWebView class reference scoraggia incorporare un UIWebView in un UIScrollView:

Importante: Non si dovrebbe incorporare UIWebView o UITableView oggetti in oggetti UIScrollView. In tal caso, un comportamento imprevisto può comportare in quanto è possibile confondere gli eventi di tocco per i due oggetti e gestire erroneamente .

Tuttavia suppongo che si vuole ancora implementare la funzione ;-)

Idea 1: Non incorporare l'UIWebView in un UIScrollView, invece eseguire JavaScript utilizzando il metodo di UIWebView stringByEvaluatingJavaScriptFromString:, modificando il DOM per aggiungi una barra degli strumenti qui sotto. Se necessario, è possibile richiamare il codice obiettivo-c da qualsiasi pulsante premuto sulla barra degli strumenti registrando alcuni schemi URL personalizzati.

Idea 2: non incorporare UIWebView in un UIScrollView, ma in un normale UIView. Basandosi sul suggerimento di Vignesh, ascolta la callback della tua scrollView interna scrollViewDidScroll: tramite il delegato, controllando l'altezza dello contentOffset rispetto all'unità contentSize ogni volta che viene richiamata la richiamata. Una volta che sono uguali, significa che sei arrivato fino in fondo. Quando ciò accade, puoi animare la cornice della tua barra degli strumenti per "inserire" l'UIView che contiene e "spingere" la cornice della webView.

Idea 3: ignorare il consiglio di Apple e incorporare UIWebView in un UIScrollView. Basandosi sul suggerimento di Vignesh, ascolta la callback della tua scrollView interna scrollViewDidScroll: tramite il delegato, controllando l'altezza dello contentOffset rispetto all'unità contentSize ogni volta che viene richiamata la richiamata. Una volta che sono uguali, significa che sei arrivato fino in fondo. Quando ciò accade, imposta la proprietà userInteractionEnabled di webView su NO e impostala su SÌ sulla scrollView che contiene la visualizzazione Web e la barra degli strumenti. Si spera che lo scroll continui senza problemi. Ovviamente è necessario ascoltare la visualizzazione di scorrimento contenente allo stesso modo per determinare quando è necessario tornare indietro allo userInteractionEnabled.

Una variazione su questa idea sarebbe quella di impostare userInteractionEnabled su NO per la visualizzazione Web, ma impostare l'altezza del frame della WebView in modo che corrisponda a contentSize, e anche ingrandire il contentSize dello scrollView di conseguenza.

Entrambe le varianti hanno lo svantaggio che in alcuni casi non sarà possibile fare cose come fare clic sui collegamenti :-(Ma forse è abbastanza buono per il tuo caso. Almeno nella prima variante non è poi così male.

Tecniche
Problemi correlati