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