2012-03-06 6 views
5

Tengo un UIWebView que muestra contenido html estático.UIWebView: ¿no cambia el tamaño del contenido en el cambio de rotación?

Cuando comienzo el ViewController en vertical y cambio a horizontal, cambia el tamaño del contenido correctamente.

Pero cuando comienzo la página en horizontal y cambio a vertical, no cambia el tamaño de mi contenido, y se necesita desplazarse para ver todo el contenido.

¿Esto es un error? ¿Hay alguna solución para forzar el cambio de tamaño del contenido de UIWebView?

+0

Ver http: // stackoverflow.com/questions/6007904/uiwebview-donest-resize-correct-when-orientation-change – buley

Respuesta

8

Tienes 2 opciones:
Añadir esto en HEAD sección de su archivo html:

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

o llame a [myWebView reload] cuando cambia la orientación

+0

Ya he probado la primera opción, y todavía deja alrededor de 5 píxeles de desplazamiento que no me gustan. Voy a probar la segunda solución mañana, si eso no hace que el webView parpadee mientras se recarga, sería una solución aceptable. Gracias – aryaxt

3

tuve un problema similar. Lo resuelto mediante la ejecución de código JavaScript para generar un evento que actualiza la orientación de la página cuando la rotación UIViewController terminado:

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

No funcionó para mí – aryaxt

+0

Ni siquiera para mí. – Tarun

1

Esta pregunta es antiguo, pero esto debe resolverlo:

myWebView.scalesPageToFit = YES;

Alternativamente, si está utilizando Interface Builder, puede marcar la casilla de verificación debajo de Attributes Inspector que dice 'Página de ventas para que quepa'.

Espero que ayude.

+0

¡Gracias señor! No me di cuenta de que la solución era tan directa. –

+2

no funcionó para mí! –

0

Terminé utilizando el segundo enfoque de @Sergey Kuryanov ya que el primero no funcionó para mí. Estaba usando el método loadHTMLString de UIWebView, así que lo verá en el código, pero puede reemplazarlo con el método que esté utilizando para cargar datos en UIWebView.

Lo primero que debe hacer es suscribirse a las notificaciones de rotación. Para hacer eso seguí la respuesta de @ clearwater82 al respecto en esta pregunta: How to detect rotation for a programatically generated UIView
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, así que también pude manejar algún formato del HTML directamente dentro de mi vista personalizada. Esto hizo que fuera muy simple agregar la función "recargar en rotación". Aquí está el código que utilicé, más detalles en la respuesta vinculado:

// 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() 
} 

sólo quiero señalar dos cosas:

  • self.htmlText es una variable que contiene el texto HTML quiero cargar que yo añadido a mi vista personalizada
  • el uso de UIDevice.current.endGeneratingDeviceOrientationNotifications() era adecuada para mi situación, puede que no sea el suyo para

eso es todo, aplausos

Cuestiones relacionadas