UIWebView cambia el tamaño en loadRequest

Tengo un UIWebView en el que el contenido se ajusta a escala. A continuación, se cambia el tamaño de la vista web para que se ajuste al contenido (consulte a continuación) y funciona como se esperaba.

La vista web también tiene un gesto de deslizar adjunto para cargar nuevas páginas: al ejecutar un loadRequest en la vista webview para la página siguiente, hay un parpadeo momentáneo en el ancho inicial de la vista web. He confirmado que el marco se está cambiando utilizando un NSTimer y UILabel s para mostrar el ancho del marco.

Aquí está el código para el cambio de tamaño:

 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; } 

El delegado de LoadFinished llama a este código en la vista web.

Intenté configurar el marco de la vista de desplazamiento de la vista web y el tamaño de ContentSize de la vista web.

¿Qué podría estar causando este parpadeo?

parpadeo de webview

El delegado webViewDidFinishLoad de UIWebView se llamará varias veces durante la carga de una página web, y el posible motivo de la película es que tiene un tamaño diferente para sus páginas web y está intentando ajustarlas cambiando el marco de su UIWebView al tamaño del contenido (de acuerdo con su código) , ¿por qué no acaba de arreglar el marco de su UIWebView y dejar que su página web encaje en su UIWebView? con solo "ancho: 100%" en el CSS de su página web.

Cambiar el tamaño del marco de la vista web aquí no es del todo correcto. El controller LoadFinished se activa una vez que la request de carga [uiwebview loadRequest:] se ha completado correctamente y no significa necesariamente que se haya completado la ejecución de su contenido HTML (DOM). Un par de notas aquí pueden ayudar:

1- asegúrese de include una label de puerto de vista en su layout HTML para mantener el aspecto de relleno. (en la cabeza)

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

2- Controle el modo de contenido de UIWebView (la escala para ajustar es la pnetworkingeterminada), Compruebe también la representación incremental de supresión si es necesario (depende de su layout)

3- prácticamente no hay manera de atrapar cuando los elementos Dom se han cargado y renderizado en HTML. quizás pueda include algún cargador allí, con un time de espera (recuerde borrarlo en la descarga de la página)

4- Si tiene algunos estándares CSS para su layout, tal vez necesite considerar el 100% de ancho de elementos para completar la página.

5- Si está utilizando la function de reproducción automática, simplemente arregle el marco de la UIWebview en lugar de manejar el WebViewFrame a cada golpe.

Eso es todo lo que puedo pensar, buena suerte.