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?

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;">

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

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
}

1
Não precisei definir o estilo do corpo. Mas eu tive que definir a cor de fundo e opaco no código.
Andrej


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


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];

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

0

Em Swift 4.x,

webView.backgroundColor = .clear
openSourceLicensesWebView.isOpaque = false
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.