ios - UIWebView cambia el tamaño en loadRequest
xamarin xamarin.ios (2)
El delegado webViewDidFinishLoad de UIWebView se llamará varias veces durante la carga de una página web, y la posible razón para la película es que tiene diferentes tamaños para sus páginas web y está intentando ajustarlas cambiando el marco de su UIWebView al tamaño del contenido (según su código) , ¿por qué no acabas de arreglar el marco de tu UIWebView y dejar que tu página web encaje en tu UIWebView? con solo "ancho: 100%" en el CSS de su página web!
Tengo un UIWebView
en el cual el contenido se escala para encajar. La vista web se redimensiona para ajustarse al contenido (ver a continuación) y funciona como se espera.
La vista web también tiene un gesto de deslizamiento adjunto para cargar páginas nuevas: al ejecutar loadRequest
en la vista webview
de la página siguiente, se produce un parpadeo momentáneo del ancho inicial de la vista web. He confirmado que el marco se está cambiando usando un NSTimer
y UILabel
s para mostrar el ancho del marco.
Aquí está el código para cambiar el 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;
}
Este código es invocado por el delegado LoadFinished
en la vista web.
Intenté establecer 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?
cambiar el tamaño del marco de la vista web aquí no es del todo correcto. El controlador LoadFinished se activa una vez que la solicitud de carga [uiwebview loadRequest:] se ha completado correctamente, y no significa necesariamente que la ejecución de su contenido HTML (DOM) se haya completado. Un par de notas aquí podrían ayudar:
1- Asegúrese de haber incluido una etiqueta de puerto de vista en su diseño HTML para mantener el aspecto de relleno. (en la cabeza)
<meta name="viewport" content="width=device-width, user-scalable=no">
2- Verifique el modo de contenido de UIWebView (la escala para ajustar es el valor predeterminado), marque la supresión de Rendering incremental también si es necesario (depende de su diseño)
3- Prácticamente no hay forma de atrapar cuando los elementos Dom se han cargado y renderizado en HTML. quizás pueda incluir algún cargador allí, con un tiempo de espera (recuerde borrarlo en la descarga de la página)
4- Si tiene algunos estándares de CSS para su diseño, quizás deba considerar el 100% del ancho de los elementos para llenar la página.
5- Si está utilizando la configuración automática, solo corrija el marco de UIWebview en lugar de manipular el WebViewFrame en cada pasada.
Eso es todo lo que puedo pensar, buena suerte.