2011-04-23 9 views
27

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.iPhone - El contenido de UIWebView con cambio de tamaño automático no se ajusta al marco

Me gustaría que su contenido se ajuste al marco de la vista web. Para ello, 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 cambia el tamaño de la estructura de la UIWebView. Parece escalado a otra cosa, más pequeño que el marco de la supervista, y más ancho que el de la vista web.

enter image description here

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

+0

se puede cambiar la línea loadRequest con el addSubview? ¿Puedes publicar una captura de pantalla? ¿El tamaño se ve bien si inicialmente establece el marco de la vista web a la de la supervista? –

+0

@Nick Weaver: Aquí está – Oliver

+0

Agregó una respuesta que explica el problema. –

Respuesta

43

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

vistazo a las siguientes capturas de pantalla:

Screeshot 1, scalesPageToFit SÍ y NO

Tanto vista web tiene la misma anchura. En la inferior, la página se ajusta perfectamente.

enter image description here

Screeshot 2, scalesPageToFit tanto que sí, pero anchuras menores fijar

Tanto vistaweb tratar de adaptarse a la página, pero no lo hará ya que hay un límite de tamaño.

enter image description here

+0

¿Es posible tomar una foto del contenido, cambiar su tamaño de forma gráfica y luego mostrarla? – Oliver

+0

Sí, puedes, es bastante fácil: mira [Cómo obtener el UIImage de la captura de pantalla de UIWebView] (http://iphone.syuhari.jp/2010/08/17/how-to-get-the-uiimage -from-screen-shot-of-the-uiwebview /) –

0

Usted puede hacer lo siguiente:

oneview.contentMode = UIViewContentModeScaleAspectFit; 

que hará que el contenido de la vista de crecer como crece su punto de vista. 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 usted encontrará una muy buena explicación de los más complicados, junto con fotografías que muestran el efecto de cada uno, en el View Programming Guide for iOS

Tenga en cuenta que el cambio de tamaño automático máscara que establezca se hacer que la vista solo crezca solo cuando su supervista crezca. 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.

+0

¿cuál es el marco de self.view? –

+1

Tenga en cuenta que también hay una propiedad UIWebView que puede establecer de la siguiente manera: oneView.scalesPageToFit = SÍ –

+0

que estaba en mi pregunta ... – Oliver

-48

Prueba esto:

[oneView setScalesPageToFit:YES]; 

... en lugar de:

oneView.scalesPageToFit = YES; 

Espero que ayude.

+11

Esto es exactamente lo mismo – Accatyyc

+0

Son lo mismo: D –

+0

Esos son los mismos – Orbitus007

2

Para aquellos, que se enfrentó mismo problema, puede desactivar el desplazamiento nativo UIWebView por

self.webView.scrollView.scrollEnabled = NO; 

y añadir una separada scrollView que se encargará de desplazamiento y zoom en lugar de desplazamiento nativo webView 's. Siguiente implementar

- (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; 
} 

al conjunto adecuado webView marco. Espero que esto ayude a alguien. Buena codificación!

0

Para Swift 2.2 que han 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) 
2

Trate this.That que 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]; 
0

Para Swift 3, que han 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) 
       } 
      } 
Cuestiones relacionadas