Así que tengo un UIWebView que muestra estática de contenido html.

Cuando inicio el ViewController en el retrato y el interruptor de paisaje, que cambia el tamaño del contenido correctamente.

Pero, cuando me pongo la página en el paisaje y el interruptor de retrato, no cambiar el tamaño de mi contenido, y el desplazamiento es necesario para ver todo el contenido.

Es esto un error? Hay una solución para forzar el cambio de tamaño del contenido de una UIWebView?

InformationsquelleAutor aryaxt | 2012-03-06

5 Comentarios

  1. 10

    Tienes 2 opciones:

    Agregar esta en HEAD sección de tu archivo html:

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

    O llame [myWebView reload] cuando los cambios de orientación

    • Ya he probado la primera opción, y se deja unos 5 de desplazamiento de píxeles, lo que no me gusta. Voy a probar la segunda solución de la mañana, si es que no causa la webView a parpadear mientras se recarga, sería una solución aceptable. Gracias
  2. 3

    He tenido un problema similar. Lo resuelto por la ejecución de código javascript para generar un evento que actualiza la orientación de la página cuando el UIViewController terminado de rotación:

    - (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
    {
        [webView stringByEvaluatingJavaScriptFromString:@"var e = document.createEvent('Events'); "
                                                        @"e.initEvent('orientationchange', true, false);"
                                                        @"document.dispatchEvent(e); "];
    }
    • No me funciona
    • Ni siquiera para mí.
  3. 3

    He probado las otras sugerencias anteriores pero que no estaban trabajando en mi página web estática que me había cargado. He intentado añadir esta línea en la cabecera de mi página web

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

    Pero todavía no se cambiar el tamaño de la anchura de la página después de cambiar la orientación entre el paisaje & retrato en mi dispositivo. Luego he añadido esta línea de func viewDidLoad() y funcionó perfectamente. Estoy ejecutando iOS 11.4

    myWebView.autoresizingMask = UIViewAutoresizing.flexibleWidth
    • si la aplicación se inicia en el modo de paisaje y, a continuación, los cambios de orientación para el modo de retrato. el webview no cambia de tamaño.
  4. 2

    Esta pregunta es viejo, pero esto debe resolverlo:

    myWebView.scalesPageToFit = YES;

    Alternativamente, si usted está utilizando el Interface Builder, usted puede marcar la casilla de verificación bajo los Atributos del Inspector que dice » página de Ventas de ajuste.’

    Espero que ayude.

    • Gracias, señor! No se dio cuenta de que la solución era que la directa.
    • no funcionó para mí !
  5. 0

    Terminé usando @Sergey Kuryanov el segundo enfoque, ya que el primero no funciona para mí. Yo estaba usando UIWebView del loadHTMLString método por lo que se ve en el código, pero se puede reemplazar con cualquier método que se utiliza para la carga de datos en el UIWebView.

    La primera cosa a hacer es suscribirse a la rotación de las notificaciones. Para hacer que seguí a @clearwater82 la respuesta sobre el asunto en esta pregunta: Cómo detectar la rotación de una forma programática generado UIView

    Reescribí su respuesta para Swift 3, usted lo puede encontrar en la misma página.

    Una vez que se hizo fue fácil volver a cargar los datos en el UIWebView utilizando loadHTMLString. Mi enfoque era envolver el UIWebView dentro de una vista personalizada de modo que también yo podría manejar algún formato del HTML directamente en el interior de mi vista personalizada. Este hecho es muy sencillo añadir el «reload-en-la rotación de la función». Aquí está el código que he usado, más detalles en los enlaces de respuesta:

    //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 he añadido a mi vista personalizada
    • el uso de UIDevice.current.endGeneratingDeviceOrientationNotifications() era adecuado para mi situación, puede que no sea el suyo

    Eso es todo, saludos

Dejar respuesta

Please enter your comment!
Please enter your name here