ios iphone uiwebview frame autoresize

ios - iPhone: el cambio de tamaño automático del contenido de UIWebView no se ajusta al marco



frame autoresize (7)

La respuesta es: ya estás 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 inferior, la página se ajusta perfectamente.

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

Ambas vistas web intentan ajustarse a la página pero no lo harán, ya que hay un límite de tamaño.

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

Me gustaría 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 al hacer esto, la página web no se redimensiona al marco de UIWebView. Parece estar escalado a otra cosa, más pequeño que el marco de la supervista, y más ancho que el de la vista web.

Si configuro el tamaño del marco de la vista web para el tamaño total de la supervista, está bien.
¿Cómo puedo forzar el contenido web (contenido real de www) para que se ajuste al marco del UIWebView "reducido"?


Puedes hacer lo siguiente:

oneview.contentMode = UIViewContentModeScaleAspectFit;

Eso hará que el contenido de su vista crezca a medida que su punto de vista crezca. El contenido crecerá lo más grande posible mientras se ajuste 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 la Guía de programación de visualización para iOS.

Tenga en cuenta que la máscara de aumento de tamaño que configure hará que la vista en sí misma solo crezca cuando crezca su supervista. Si self.view ya es grande cuando se crea el pequeño UIWebView y self.view no crece, el UIWebView no crecerá. Probablemente estés al tanto de esto, pero lo estoy agregando por si acaso, ya que no podemos ver el marco de self.view en este fragmento de código.

Espero que esto sea útil.


Prueba esto:

[oneView setScalesPageToFit:YES];

... en lugar de:

oneView.scalesPageToFit = YES;

Espero que ayude.


Para aquellos que tuvieron el mismo problema, puede desactivar el desplazamiento nativo de UIWebView

self.webView.scrollView.scrollEnabled = NO;

y agregue un scrollView separado que controlará el desplazamiento y el zoom en lugar del desplazamiento nativo de webView . Siguiente implemento

- (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. Buena codificación!


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)


Prueba esto. Eso está funcionando 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];


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