tutorial open example crear javascript ios objective-c uiwebview ios10

javascript - open - Calcular la altura dinámica del contenido de UIWebView con ''document.body.scrollHeight;'' devuelve un mayor valor en iOS 10



uiwebview tutorial (3)

He luchado mucho para redimensionar WebView correctamente.

Intente agregar un paso más antes de evaluar document.body.scrollHeight.

Algo como esto:

-(void) webViewDidFinishLoad:(UIWebView *)webView { if[[webView stringByEvaluatingJavaScriptFromString:@"document.readyState"] isEqualToString:@"complete"]){ webViewHeight = [[WebView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue]; //resize logic }

Estoy escribiendo mi código rápidamente y para WKWebView, pero básicamente es lo mismo. El punto es capturar scrollHeight (o offsetHeight - no se pudo deducir la diferencia en este caso) en el momento correcto, y parece que ese momento es solo después de document.readyState.

Espero que esto te ayudará.

Estoy creando en una aplicación usando Objective C, donde estoy usando un UIWebView para mostrar los contenidos en formato HTML. Estoy usando el código siguiente en el método de delegado de webViewDidFinishLoad

NSUInteger contentHeight = [[aWebView stringByEvaluatingJavaScriptFromString: [NSString stringWithFormat: @ "document.body.scrollHeight;"]] intValue];

para calcular la altura del contenido de la vista web, funciona bien en iOS8 , iOS9 e iOS11 pero en dispositivos móviles iPhone iOS10 la altura del contenido iOS10 un valor mucho mayor que el valor del contenido real. Debido a esto, obtengo un espacio en blanco adicional en la parte inferior de mi vista web en la pantalla.

Probé todas las soluciones pero obtuve la misma altura de contenido incorrecto solo en iOS 10. Ayúdame a resolver este problema. ¡Gracias de antemano!


Lamentablemente, tampoco puedo rastrear el problema. PERO, creo que conozco al culpable: html <tables> y cambio de tamaño automático. Hay un poco de discusión, en el registro de cambios del safari de Apple, sobre los cambios en la ventana gráfica y el renderizado, pero nada específico.

Parecería que las vistas web (safari powered) procesan HTML de forma diferente entre versiones; tiene sentido, aunque no puedo destilar mucha rima o razón y el CSS explícito para la <table> y <body> no arrojó nada.

Afortunadamente, esta respuesta parcial ayuda a hacer algún progreso o al menos una solución alternativa.


He usado la siguiente forma para obtener contentSize.

He añadido un observador (KVO) en la vista de desplazamiento de la vista web.

self.webView.scrollView.addObserver(self, forKeyPath: "contentSize", options: .new, context: nil);

Ahora, cuando se cambie el contenido de la vista web, recibo una devolución de llamada en este método

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { }

Ahora tome el contentSize del objeto de este método y úselo.