2015-12-11 19 views
7

Ho un UIWebView in cui il contenuto è ridimensionato per adattarsi. La visualizzazione Web viene quindi ridimensionata per adattarla al contenuto (vedere di seguito) e funziona come previsto.UIWebView ridimensiona su loadRequest

La visualizzazione Web presenta anche un gesto di sfioramento per caricare nuove pagine: quando si esegue uno webview per la pagina successiva, sullo schermo webview si verifica uno sfarfallio momentaneo della larghezza iniziale della visualizzazione Web. Ho confermato che il frame è stato modificato utilizzando uno NSTimer e UILabel s per visualizzare la larghezza del frame.

Ecco il codice per il ridimensionamento:

string bookHeightS = bookWebview.EvaluateJavascript ("document.getElementsByTagName('body')[0].scrollHeight"); 
string bookWidthS = bookWebview.EvaluateJavascript ("document.getElementsByTagName('body')[0].offsetWidth"); 

nfloat bookHeight = 0; 
nfloat.TryParse (bookHeightS, out bookHeight); 

nfloat bookWidth = 0; 
nfloat.TryParse (bookWidthS, out bookWidth); 

nfloat scaling = bookWebview.Frame.Height/bookHeight; 

nfloat initialWidth = bookWebview.Frame.Width; 
nfloat newWidth = scaling * bookWidth; 

CGRect frame = new CGRect (bookWebview.Frame.Location, new CGSize (newWidth, bookWebview.Frame.Height)); 


if (frame.Width != bookWebview.Frame.Width) { 
    bookWebview.Frame = frame; 
} 

Questo codice è chiamato dal LoadFinished delegato sul WebView.

Ho provato ad impostare la cornice della vista a scorrimento della webview e le dimensioni della vista web ContentSize.

Cosa potrebbe causare questo sfarfallio?

flickering webview

+0

man, prova a verificare ora molte volte 'LoadFinished' è chiamato. Pensa che ci sia un problema. Inoltre, prova un altro html (ad esempio la pagina web di Apple?). –

risposta

2

webViewDidFinishLoad delegato di UIWebView sarà chiamato più volte durante il caricamento di una pagina web, e la ragione possibile per il film è che hai formato differente per le pagine web e si sta cercando di farli stare dal cambiamento la cornice di UIWebView a la dimensione del contenuto (in base al tuo codice), perché non hai appena aggiustato la cornice di UIWebView e lasciato che la tua pagina web si adatti alla tua UIWebView? con solo "larghezza: 100%" nel css della tua pagina web!

+0

Sfortunatamente il contenuto della webview non sarà mai una dimensione consistente, e l'uso di un metodo "stretch to fit" causerebbe inevitabilmente il taglio di parte del contenuto sull'asse Y. Inoltre, non ho il controllo del codice all'interno della webview, anche se in teoria potrei eseguire JS per aggiungere CSS. –

+0

@TomWalters sembra che tu abbia bisogno di un migliore coordinamento con il fornitore di contenuti e applichi un qualche tipo di principio di progettazione. – Allen

+0

Se solo, è un lettore di e-book che significa che non esiste una dimensione standard –

1

il ridimensionamento della cornice della vista Web qui non è del tutto corretto. Il gestore LoadFinished si attiva una volta che la richiesta di caricamento [uiwebview loadRequest:] è stata completata correttamente e non significa necessariamente che l'esecuzione del contenuto HTML (DOM) è stata completata. Un paio di note qui potrebbe aiutare:

1- essere sicuri di aver incluso un tag porto vista nella progettazione HTML per mantenere aspetto di riempimento. (Nella testa) Modalità contenuti UIWebView

<meta name="viewport" content="width=device-width, user-scalable=no"> 

2- controllo (scala per adattarsi è l'impostazione predefinita), controllare il rendering incrementale Supress così se necessario (dipende dal vostro disegno)

3 - praticamente non c'è modo di catturare quando gli elementi di Dom sono caricati e resi in HTML. forse puoi includere qualche caricatore lì, con un timeout (ricordati di cancellarlo alla pagina di scarico)

4- Se hai alcuni standard CSS per il tuo design, forse devi considerare il 100% di larghezza degli elementi per riempire il pagina.

5- se si utilizza l'autolayout è sufficiente correggere il frame di UIWebview anziché gestire il WebViewFrame ad ogni scorrimento.

Questo è tutto ciò che riesco a pensare, Buona fortuna.

Problemi correlati