UIWebView: ¿No cambia el tamaño del contenido en el cambio de rotation?

Entonces tengo un UIWebView que muestra contenido html estático.

Cuando inicio ViewController en retrato y cambio a paisaje, cambia el tamaño del contenido correctamente.

Pero, cuando comienzo la página en el paisaje y cambio a retrato, no cambia el tamaño de mi contenido, y se requiere un desplazamiento para ver todo el contenido.

¿Es esto un error? ¿Hay alguna solución para obligar a cambiar el tamaño del contenido de UIWebView ?

Tienes 2 opciones:
Agregue esto a la sección HEAD de su file html:

 <meta name="viewport" content="width=device-width" /> 

O llame a [myWebView reload] cuando la orientación cambie

Tuve un problema similar. Lo solucioné ejecutando el código javascript para generar un evento que actualiza la orientación de la página cuando el UIViewController finalizó la rotation:

 - (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { [webView stringByEvaluatingJavaScriptFromString:@"var e = document.createEvent('Events'); " @"e.initEvent('orientationchange', true, false);" @"document.dispatchEvent(e); "]; } 

Esta pregunta es antigua, pero esto debería solucionarlo:

myWebView.scalesPageToFit = YES;

Alternativamente, si está utilizando Interface Builder, puede marcar la checkbox en el Inspector de attributes que dice 'Página de ventas para adaptarse'.

Espero eso ayude.

Terminé usando el segundo enfoque de @Sergey Kuryanov, ya que el primero no funcionó para mí. Estaba usando el método loadHTMLString de loadHTMLString para que veas eso en el código, pero puedes replacelo con cualquier método que uses para cargar datos en UIWebView.

Lo primero que debe hacer es suscribirse a las notifications de rotation. Para hacer eso, seguí la respuesta de @ clearwater82 sobre el asunto en esta pregunta: Cómo detectar la rotation para un UIView generado de forma progtwigda
Reescribí su respuesta para Swift 3, puedes encontrarla en la misma página.

Una vez hecho esto, fue fácil volver a cargar los datos en UIWebView usando loadHTMLString . Mi enfoque fue envolver el UIWebView dentro de una vista personalizada para que también pudiera manejar el formatting del HTML directamente dentro de mi vista personalizada. Esto hizo que sea muy simple agregar la function "recargar-en-rotation". Aquí está el código que utilicé, más detalles en la respuesta enlazada:

 // Handle rotation UIDevice.current.beginGeneratingDeviceOrientationNotifications() NotificationCenter.default.addObserver( self, selector: #selector(self.orientationChanged(notification:)), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil ) // Called when device orientation changes func orientationChanged(notification: Notification) { // handle rotation here self.webView.loadHTMLString(self.htmlText, baseURL: nil) } deinit { NotificationCenter.default.removeObserver(self) UIDevice.current.endGeneratingDeviceOrientationNotifications() } 

Solo quiero señalar dos cosas:

  • self.htmlText es una variable que contiene el text HTML que quiero cargar que agregué a mi vista personalizada
  • el uso de UIDevice.current.endGeneratingDeviceOrientationNotifications() era apropiado para mi situación, podría no ser para el tuyo

Eso es todo, saludos