Cómo hacer una UIWebView transparente


117

Tengo una aplicación con una UITableViewvista de detalle correspondiente para cada fila. En la vista de detalles, tengo que mostrar algo de texto y una imagen de fondo (el texto es diferente para cada fila, pero la imagen sigue siendo la misma). La forma más sencilla, en mi opinión, es poner el texto en un archivo .rtf y mostrarlo en formato UIWebView. Luego, coloque un UIImageViewdetrás del UIWebView.

Intenté establecer la UIWebViewopacidad de 'en cero en IB, pero no ayudó.

¿Me puedes ayudar?

Respuestas:


302

Yo recomiendo:

webView.opaque = NO;
webView.backgroundColor = [UIColor clearColor];

(configurar estas propiedades en Interface Builder funcionará para iOS 5.0+, pero para iOS 4.3 debe establecer backgroundColor en el código )

E incluya esto en su código HTML:

<body style="background-color: transparent;">

Funciona con iOS 5. Al menos en el simulador.
Jason McCreary

1
Pude establecer la opacidad y backgroundColor en IB. Para mí, la etiqueta de estilo era lo que impedía que esto funcionara.
devinfoley

de esta forma funciona para 4.2.1 si escribe estas cadenas solo como código. Si configura las mismas opciones en el constructor de iterface, no obtendrá un fondo transparente
Gargo

2
El <body style="background-color: transparent;">parece ser opcional, al menos en los últimos versiones de iOS.
zeroimpl

21

Utilice el método recursivo a continuación para eliminar el degradado de UIWebView:

[webView setBackgroundColor:[UIColor clearColor]];
[self hideGradientBackground:webView];


- (void) hideGradientBackground:(UIView*)theView
{
  for (UIView * subview in theView.subviews)
  {
    if ([subview isKindOfClass:[UIImageView class]])
      subview.hidden = YES;

    [self hideGradientBackground:subview];
  }
}

no olvide escribir webView.opaque = NO;
Nilesh Kikani

1
¿De qué "gradiente" estamos hablando aquí?
Greg Maletic

7

Actualización rápida:

webView.opaque = true
webView.backgroundColor = UIColor.clearColor()

Y de nuevo, no olvides configurar

<body style="background-color: transparent">

O mejor aún, en lugar de un estilo en línea, en su hoja de estilo:

body {
     background-color: transparent
}

1
No necesitaba establecer el estilo de la carrocería. Pero tuve que establecer un color de fondo y un código opaco.
Andrej


4

En XCode 6.x, desmarque Opaco y cambie la opacidad del fondo a 0% . Creo que otras versiones de XCode también funcionarán.ingrese la descripción de la imagen aquí


3

Pude hacer que mi UIWebView fuera transparente yendo a 'Attributes Inspector' y desmarcando Drawing Opaque.

Mi código HTML solo como referencia.

    UIWebView* webView =(UIWebView *) [cell viewWithTag:100];
    NSString* htmlContentString = [NSString stringWithFormat:
                                   @"<html>"
                                   "<style type='text/css'>html,body {margin: 0;padding: 0;width: 100%%;height: 100%%;}</style>"
                                   "<body>"
                                   "<table style='border:1px solid gray; border-radius: 5px; overflow: hidden;color:white;font-size:10pt' cellspacing=\"0\" cellpadding=\"1\" align='right'><tr>"
                                   "<td>Hello</td><td>There</td>"
                                   "</tr></table>"
                                   "</body></html>"
                                   ];
    [webView loadHTMLString:htmlContentString baseURL:nil];

0

Para eliminar los pergaminos y hacer los UIWebViewtransparentes, pruebe este código a continuación:

webView.opaque = NO;  
webView.backgroundColor = [UIColor clearColor];  

for(UIView *view in webView.subviews){   
     if ([view isKindOfClass:[UIImageView class]]) {  
          // to transparent   
          [view removeFromSuperview];  
     }  
     if ([view isKindOfClass:[UIScrollView class]]) {  
          UIScrollView *sView = (UIScrollView *)view;  
          //to hide Scroller bar 
          sView.showsVerticalScrollIndicator = NO;  
          sView.showsHorizontalScrollIndicator = NO;
          for (UIView* shadowView in [sView subviews]){  
               //to remove shadow  
               if ([shadowView isKindOfClass:[UIImageView class]]) {  
                    [shadowView setHidden:TRUE];  
               }  
          }  
     }   
}  

0

En Swift 4.x,

webView.backgroundColor = .clear
openSourceLicensesWebView.isOpaque = false
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.