Pregunta

Tengo una aplicación que utiliza UIWebViews en varios controladores de vista. El UIWebViews se utilizan para representar HTML generado localmente, sin acceso a la red lenta necesario.

Para ahorrar memoria sólo cargar estos en la demanda que se requiere para la devolución de llamada viewcontroller viewWillAppear. (Y descarga fuera de la pantalla en respuesta a instancias didReceiveMemoryWarning mensajes.)

El problema es que el usuario llegue a ver el código HTML que se queden, a veces acompañado de destellos de estilo y otros artefactos desagradables surtidos. Me gustaría mucho más la prestación ser hecho fuera de la pantalla, y revelar el punto de vista totalmente rendido cuando está listo.

Sería muy ordenado para poder tener el viewWillAppear no volver hasta que el UIWebView está representado completamente. Pero, ¿cómo?

Yo digo la UIWebView qué mostrar mediante el envío de un mensaje loadHTMLString:baseURL:. Esta es asíncrona, y algún tiempo (poco) más tarde el delegado de la vista web se llamó webViewDidFinishLoad.

I experimentado con la ejecución de un runloop dentro viewWillAppear, que ejecuta la NSDefaultRunLoopMode o UITrackingRunLoopMode. Esto funciona en el simulador (que se queja en el registro

  

[CATransaction Sincronizar] llamado dentro de transacción

pero funciona), pero en un dispositivo que bloquea al principio, con webViewDidFinishLoad Nunca se llama.

(Además, parece que la carga UIWebView propiedad no funciona. Por lo menos, después de que yo llamo loadHTMLString:baseURL: y antes de obtener la devolución de llamada que no es verdad.)

No hay solución correcta

Otros consejos

Las porciones de las soluciones aquí, creo. Una labor más rápida es para cargar el UIWebView con su propiedad oculta el valor de YES. A continuación, establezca su UIViewController como el delegado UIWebViews e implementar:

- (void)webViewDidFinishLoad:(UIWebView *)webView

donde se establece la propiedad de nuevo a NO.

Una cosa a destacar es que webViewDidFinishLoad se disparará más de una vez si ha enmarcado / contenido incrustado. Así que hay que realizar un seguimiento de esto. en realidad no debería ser un problema si está cargando el contenido local.

Me gusta la solución de monowerker mejor, pero otra solución sería la de aferrarse a la UIWebView prestados ya-todo el tiempo (en algún objeto más permanente que el controlador de vista). Yo sólo haría que si el aspecto de la solución de monowerker es demasiado perjudicial.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top