O plano de fundo do UIWebView está definido como Cor clara, mas não é transparente


140

Estou desenvolvendo um aplicativo iOS 4 usando a versão mais recente do iOS SDK e o XCode 4.2.

Eu tenho um XIB com um UIWebViewcom Alpha = 1.0 , plano de fundo definido como cor clara e opaco não está definido. Neste XIB, configurei uma imagem como plano de fundo com este código:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"AboutBackground.png"]];
        self.view.backgroundColor = background;
        [background release];
    }
    return self;
}

O UIWebViewestá mostrando um html estático:

<html><head></head><body style=\"margin:0 auto;text-align:center;background-color: transparent; color:white\">...</body></html>

No simulador do iOS 5, seu plano de fundo é transparente, mas em um dispositivo iOS 4 é cinza.

Qualquer pista?


tente apenas colocar um UIImageView na visualização da web no criador de interface e definir sua imagem.
Stas

Obrigado pela sua resposta, mas a visualização da Web não preenche a tela inteira.
VansFannel

Respostas:


360

Defina também:

[webView setBackgroundColor:[UIColor clearColor]];
[webView setOpaque:NO];

3
Isso só funciona para mim se eu definir a cor e a opacidade do plano de fundo depois de chamar loadHTMLString. Parece que loadHTMLString redefine esses dois valores.
Justin Anderson

1
Sei que a pergunta era para iOS, mas se for para OSX, esta pergunta e resposta resolve o problema e também pode ajudar as pessoas com iOS.
Volomike

Esta solução ainda está funcionando no iOS 12.1, Xcode 10.1 e Swift.
Bhavin_m

15
     /*for ios please set this*/

     [webViewFirst setOpaque:NO];

     /*for html please set this*/
     <body style="background:none">

9

Além de definir o plano de fundo da visualização da web para limpar a cor, defina também opaco como falso.


Obrigado pela sua resposta, mas opaco não está definido no Interface Builder.
VansFannel 29/12

Tente configurá-lo após chamar [super viewDidLoad: animated]; .
Elegia

Oi, Eu tenho o mesmo problema ... funciona no iOS5, mas fundo cinza no iOS4. Como você resolveu isso?
user542584

3
webView.opaque = NO;

webView.backgroundColor = [UIColor clearColor];

3

Você pode tentar este código (eu sei, que é inseguro, mas funciona mesmo para o ios5):

- (void)makeBodyBackgroundTransparent {
        for (UIView *subview in [webView subviews]) {
            [subview setOpaque:NO];
            [subview setBackgroundColor:[UIColor clearColor]];
        }
        [webView setOpaque:NO];
        [webView setBackgroundColor:[UIColor clearColor]];
}


3
NSString *content=@"example clear background color UIWebview";
NSString *style=[NSString stringwithformat:@"<html><head><style>body {background-color:transparent;}</style></head><body>%@</body></html>",content];
[myWebview loadhtmlstring:style baseurl:nil];

1

Para Objetivo

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

Certifique-se de incluir isso no seu código HTML:

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

ou

 <body style="background:none">

0

Versão Swift mais recente (conforme necessário):

lazy var webView: UIWebView = {
    let view = UIWebView()
    view.delegate = self
    view.backgroundColor = .clear
    view.isOpaque = false
    return view
}()

Remova a linha de delegado, se não for necessário

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.