2013-02-07 5 views
32

Sto costruendo un'applicazione che carica in un piccola quantità piccola HTML (localmente) in una singola UIWebView a schermo intero. Sto notando che lo scorrimento di questa visualizzazione Web si presenta in modo diverso da rispetto a qualsiasi altro UIScrollView. Questo non sembra essere un problema di prestazioni o di reattività, di per sé ... È solo una questione di come si sviluppa il momento in cui trascini e scorri la vista web su e giù. Semplicemente non si sente molto "nativo" (per mancanza di una parola migliore). È come scorrere melassa o budino ... un po '"appiccicoso" e non come "chiazza di petrolio" come vorresti sentire.Perché lo scorrimento di un UIWebView * è così diverso da scorrere qualsiasi altro UIScrollView?

Qualcuno sa che cosa causa questo? C'è un modo per risolverlo o per lo meno fare scorrere una UIWebView più "nativa"?

+0

Che tipo di HTML stai visualizzando? Forse c'è un modo per realizzare tutto usando i controlli nativi. –

+0

@JackLawrence - L'HTML è in realtà generato dall'utente, estratto periodicamente dal server e archiviato nei dati principali. Potrei teoricamente implementare la vista con i controlli nativi, ma non è così flessibile come visualizzare direttamente i dati generati dall'utente. – wxactly

risposta

53

Ho la stessa percezione. Deve avere a che fare con la velocità di decelerazione scrollView di webView. Ho appena eseguito questo test, e 1) conferma il nostro sospetto e 2) suggerisce una soluzione.

ho aggiunto uno ScrollView e un WebView al mio UI poi registrato il seguente:

NSLog(@"my scroll view's decel rate is %f", self.scrollView.decelerationRate); 
NSLog(@"my web view's decel rate is %f", self.webView.scrollView.decelerationRate); 
NSLog(@"normal is %f, fast is %f", UIScrollViewDecelerationRateNormal, UIScrollViewDecelerationRateFast); 

L'uscita conferma l'ipotesi circa WebView essere più attrito:

my scroll view's decel rate is 0.998000 
my web view's decel rate is 0.989324 
normal is 0.998000, fast is 0.990000 

e suggerisce una correzione:

self.webView.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal; 
+0

liscio come la seta. Semplicemente perfetto. Grazie! – wxactly

+15

Vale la pena notare che ciò avviene perché le visualizzazioni Web sono molto più costose da eseguire rispetto alla maggior parte delle altre visualizzazioni. Rendere lo scorrimento "più rigido" aiuta a nasconderlo assicurandosi che ci sia meno nuova area da disegnare quando l'utente scorre. Questo non vuol dire che non dovresti cambiarlo se sai che una particolare vista web può gestirlo, ma tieni presente che * è * fatto per una ragione e devi assicurarti che non sia un problema per il tuo caso d'uso. –

+0

Questo è fantastico! Spero che funzioni per il mio progetto. Grazie. –