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.