Attualmente sto sviluppando un'applicazione che utilizza uno UIWebView
per visualizzare alcuni contenuti. Funzionava perfettamente con UIWebView
, ma abbiamo deciso di passare a WKWebView
quando abbiamo aumentato il requisito del sistema operativo a 8.1. Abbiamo notato un enorme miglioramento delle prestazioni, ma alcuni semplici pensano che funzionassero bene, iniziando a fallire ora. Dopo alcune ricerche, sono riuscito a vedere cosa sta succedendo, ma non vedo come risolverlo. Mi chiedevo se qualcuno potesse darmi una mano su questo ...WKWebView non esegue il re-rendering del contenuto durante il caricamento di un altro URL
L'URL che la nostra pagina web carica impiega un bel po 'di tempo per completare il lavoro, quindi prima di iniziare la richiesta carichiamo uno spinner statico quindi l'utente non lo fa Mi sento come se l'app fosse impazzita. Il ciclo di caricamento per quel contenuto statico è già stato regolato, quindi non iniziamo la richiesta URL finché il contenuto statico non è stato caricato correttamente. Funziona bene, a patto che l'utente non ruoti il dispositivo. Questo è ciò che può essere visto:
(ho dovuto cambiare la visualizzazione per ragioni di privacy non sono il proprietario di questo codice, dopo tutto :-).)
Sono usando questo codice html per testare la dimensione. Il colore di sfondo del corpo è grigio scuro, e il brutto riquadro grigio chiaro si espande al 100% della larghezza, sottraendo i margini. Fin qui tutto bene. Ma se l'utente ruota il dispositivo, questo è ciò che accade:
Questo è da brividi, dal momento che a quanto pare stetching del corpo in modo che corrisponda alla larghezza massima, ma il div interno sta gestendo una dimensione relativa sbagliata. Questo continua finché la richiesta è in elaborazione. Quando forzo un timeout per effettuare la richiesta sicuro, il WKWebView
ri-rendering e mostra il suo aspetto corretto:
volta ho scoperto questo ho cercato, senza successo, abbonarsi alla rotazione osservatore e forza ri -renders sul WebView per:
- Calling
viewNeedsDisplay
sia per ilUIWebView
eUIScrollView
all'interno - Ri-dimensionamento della
UIWebView
- Per spostare il contenuto
UIScrollView
Quindi, le mie conclusioni finora:
- questo non è accaduto su un
UIWebView
, proprio sulla nuovaWKWebView
(ho provato di nuovo questo, confermato) - Sembra
WKWebView
non viene visualizzata correttamente viste mentre è in stato di caricamento
Vuol somebod sai se c'è un modo per risolvere questo problema? Qualcosa come una proprietà magica che mi manca è disabilitata di default? Non voglio pensare che abbiano rotto questa parte quando hanno rifatto il webview ...Grazie in anticipo :)
Modifica: Stuff ho provato dal momento che la creazione della carica, senza successo:
- Modifica del DOM asyncronally, attraverso l'utilizzo di JavaScript/callback rotazione nativi non lo fa lavoro. Le modifiche non vengono visualizzate finché la richiesta http non termina.
- Chiamare la richiesta http in una thread diversa utilizzando il metodo
dispatch_async
non funziona. Sotto il cofano, loWKWebview
probabilmente finisce per usare lo stesso thread come se lo chiamassi dal thread principale.
Prova ad aggiornare manualmente la pagina con un cambio di orientamento? Non conosco il codice esatto che useresti – DDPWNAGE
Non posso farlo. Dopo tutto, se non hai perso il punto della spiegazione, questo problema si verifica quando ti aspetti una risposta da un'altra richiesta, quindi se aggiorno la pagina che lancia una nuova richiesta, scartando quella vecchia ... e bloccando l'app;) – Bartserk
Lo hai mai capito? Penso che mi stia imbattendo in un problema simile che si muove attorno a una WKWebview in cui è presente del video. – raphael