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?

Knodel
fuente

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;">
Ortwin Gentz
fuente
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];
  }
}
Nilesh Kikani
fuente
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
}
kmiklas
fuente
1
No necesitaba establecer el estilo de la carrocería. Pero tuve que establecer un color de fondo y un código opaco.
Andrej
5

Para Swift 3 y Xcode 8

self.webView.isOpaque = false;
self.webView.backgroundColor = UIColor.clear
Museer Ahamad Ansari
fuente
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í

Pyae Thu Aung
fuente
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];
Xavier John
fuente
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];  
               }  
          }  
     }   
}  
DamithH
fuente
0

En Swift 4.x,

webView.backgroundColor = .clear
openSourceLicensesWebView.isOpaque = false
yo2bh
fuente