Como fazer uma UIWebView transparente

117

Eu tenho um aplicativo com um UITableViewe uma visualização de detalhes correspondente para cada linha. Na visualização de detalhes, tenho que exibir algum texto e uma imagem de fundo (o texto é diferente para cada linha, mas a imagem permanece a mesma). A maneira mais fácil, em minha opinião, é colocar o texto em um arquivo .rtf e exibi-lo em a UIWebView. Em seguida, basta colocar um UIImageViewatrás de UIWebView.

Tentei definir a UIWebViewopacidade do para zero no IB, mas não ajudou.

Pode me ajudar?

Knodel
fonte

Respostas:

302

Eu recomendo:

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

(definir essas propriedades no Interface Builder funcionará para iOS 5.0+, mas para iOS 4.3 você deve definir backgroundColor no código )

E inclua isso em seu código HTML:

<body style="background-color: transparent;">
Ortwin Gentz
fonte
Funciona iOS 5. Pelo menos no simulador.
Jason McCreary
1
Consegui definir a opacidade e a cor de fundo no IB. Para mim, a etiqueta de estilo era o que impedia isso de funcionar.
devinfoley
isso funciona para 4.2.1 se você escrever essas strings apenas como código. Se você configurar as mesmas opções no construtor de iterface, não obterá um fundo transparente
Gargo
2
O <body style="background-color: transparent;">parece ser opcional, pelo menos nas versões recentes do iOS.
zeroimpl
21

Use o método recursivo abaixo para remover gradiente 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
fonte
não se esqueça de escrever webView.opaque = NO;
Nilesh Kikani
1
Uh, de que "gradiente" estamos falando aqui?
Greg Maletic,
7

Atualização rápida:

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

E, novamente, não se esqueça de definir

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

Ou melhor ainda, em vez de um estilo embutido, em sua folha de estilo:

body {
     background-color: transparent
}
kmiklas
fonte
1
Não precisei definir o estilo do corpo. Mas eu tive que definir a cor de fundo e opaco no código.
Andrej
5

Para Swift 3 e Xcode 8

self.webView.isOpaque = false;
self.webView.backgroundColor = UIColor.clear
Museer Ahamad Ansari
fonte
4

No XCode 6.x, desmarque Opaco e altere a opacidade do fundo para 0% . Acho que outras versões do XCode também funcionarão.insira a descrição da imagem aqui

Pyae Thu Aung
fonte
3

Consegui tornar meu UIWebView transparente indo em 'Attributes Inspector' e desmarcando Drawing Opaque.

Meu código HTML apenas para referência.

    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
fonte
0

Para remover os pergaminhos e torná-los UIWebViewtransparentes, tente este código abaixo:

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
fonte
0

Em Swift 4.x,

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