iPhone-Redimensionamiento automático del contenido de UIWebView no se ajusta al marco


Estoy generando un UIWebView en mi método viewDidLoad, con un tamaño pequeño (digamos algo como 50x70). Y luego lo puse en un super UIView.

Me gustaría hacer que su contenido se ajuste al marco de WebView. Para hacer esto, escribí:

        oneView = [[UIWebView alloc] initWithFrame:CGRectMake(x, y, W, H)];
        oneView.backgroundColor = [UIColor whiteColor];
        oneView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
        oneView.scalesPageToFit = YES;
        oneView.autoresizesSubviews = YES;

        [self.view addSubview:oneView];
        [oneView loadRequest:/*some request*/];

Pero haciendo esto, la página web no se redimensiona al marco de UIWebView. Parece ser escalado a otra cosa, más pequeño que el marco del superview, y más ancho que el de la webview.

introduzca la descripción de la imagen aquí

Si establezco la vista web tamaño de fotograma al tamaño de toda la superview, está bien.
¿Cómo puedo forzar el contenido web (contenido www real) para encajar en el marco de la "reducida" UIWebView ?

Author: swiftBoy, 2011-04-23

7 answers

La respuesta es: usted ya está haciendo esto, pero hay límites.

Mira las siguientes capturas de pantalla:

Screeshot 1, scalesPageToFit SÍ y NO

Ambas vistas web tienen el mismo ancho. En la parte inferior la página encaja perfectamente.

introduzca la descripción de la imagen aquí

Screeshot 2, scalesPageToFit ambos SÍ pero anchos más pequeños establecidos

Ambos webview intentan encajar en la página, pero no lo hará, ya que hay un límite de tamaño.

introduzca la descripción de la imagen aquí

 44
Author: Nick Weaver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-23 12:26:37

Para aquellos que se enfrentaron al mismo problema, puede desactivar el desplazamiento nativo de UIWebView mediante

self.webView.scrollView.scrollEnabled = NO;

Y agregue un scrollView separado que manejará el desplazamiento y el zoom en lugar del desplazamiento nativo de webView. Next implement

- (void) webViewDidFinishLoad:(UIWebView *)webView
{
   CGRect frame = _webView.frame;
   CGSize fittingSize = [_webView sizeThatFits:_webView.scrollView.contentSize];
   frame.size = fittingSize;
   _webView.frame = frame;
   self.scrollView.contentSize = self.webView.scrollView.contentSize;
}

Para establecer el marco webView adecuado. Espero que esto ayude a alguien. ¡Buen código!

 2
Author: zshcbka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-09 17:21:46

Prueba esto.Eso funciona para mí.

NSString *strTemplateHTML = [NSString stringWithFormat:@"<html><head><style>img{max-width:100%%;height:auto !important;width:auto !important;};</style></head><body style='margin:0; padding:0;'>%@</body></html>", @"insert your html content here"];

[webView loadHTMLString:strTemplateHTML baseURL:nil];
 2
Author: Rajni Johar Raswant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-12 11:41:15

Puedes hacer lo siguiente:

oneview.contentMode = UIViewContentModeScaleAspectFit;

Eso hará que el contenido de tu vista crezca a medida que tu vista crezca. El contenido crecerá lo más grande posible sin dejar de encajar dentro de UIWebView y sin distorsión.

Hay otras opciones para esta propiedad, y encontrará una explicación bastante buena de las más complicadas, junto con imágenes que muestran el efecto de cada una, en Ver Guía de programación para iOS

Tenga en cuenta que la máscara de autoresizing que establece hará que la vista en sí crezca solo cuando su superview crezca. Si yo.la vista ya es grande cuando se crea el pequeño UIWebView y auto.la vista no crece, el UIWebView no crecerá. Probablemente seas consciente de esto, pero lo estoy agregando por si acaso, ya que no podemos vernos a nosotros mismos.marco de la vista en este fragmento de código.

Espero que esto sea útil.

 0
Author: salo.dm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-23 12:16:08

Para Swift 2.2 He logrado lo mismo con

//Document file url
var docUrl = NSURL(string: "https://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwjjwPSnoKfNAhXFRo8KHf6ACGYQFggbMAA&url=http%3A%2F%2Fwww.snee.com%2Fxml%2Fxslt%2Fsample.doc&usg=AFQjCNGG4FxPqcT8RXiIRHcLTu0yYDErdQ&sig2=ejeAlBgIZG5B6W-tS1VrQA&bvm=bv.124272578,d.c2I&cad=rja")

let req = NSURLRequest(URL: docUrl!)
webView.delegate = self
//here is the sole part
webView.scalesPageToFit = true
webView.contentMode = .ScaleAspectFit
webView.loadRequest(req)
 0
Author: swiftBoy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-14 12:27:46

Para Swift 3, he logrado lo mismo con

DispatchQueue.main.async {
                if let finalURL = URL(string: urlString) {
                    let request = URLRequest(url: finalURL)

                    // self.webView.sizeToFit()
                    self.webView.scalesPageToFit = true
                    self.webView.contentMode = .scaleAspectFit
                    self.webView.loadRequest(request)
                }
            }
 0
Author: Lion,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-14 07:28:31

Prueba esto:

[oneView setScalesPageToFit:YES];

... en lugar de:

oneView.scalesPageToFit = YES;

Espero que eso ayude.

 -48
Author: Pavel Kanapatski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-09 19:45:13