L'arrière-plan UIWebView est défini sur Clear Color, mais il n'est pas transparent


140

Je développe une application iOS 4 en utilisant la dernière version du SDK iOS et XCode 4.2.

J'ai un XIB avec un UIWebViewavec Alpha = 1.0 , l' arrière - plan défini sur Clear Color et Opaque n'est pas défini. Sur ce XIB, je configure une image en arrière-plan avec ce code:

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

Le UIWebViewmontre un HTML statique:

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

Sur le simulateur iOS 5, son arrière-plan est transparent, mais sur un appareil iOS 4 est gris.

Un indice?


essayez de simplement mettre un UIImageView sur votre vue Web dans le générateur d'interface et définissez-le votre image.
Stas du

Merci pour votre réponse, mais la vue Web ne remplit pas tout l'écran.
VansFannel

Réponses:


360

Définissez également:

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

3
Cela ne fonctionne pour moi que si je définis la couleur et l'opacité d'arrière-plan après avoir appelé loadHTMLString. Il semble que loadHTMLString réinitialise ces deux valeurs.
Justin Anderson

1
Je sais que la question était pour iOS, mais si pour OSX, cette question et réponse résout le problème et peut également aider ceux qui utilisent iOS.
Volomike

Cette solution fonctionne toujours sous iOS 12.1, Xcode 10.1 et Swift.
Bhavin_m

15
     /*for ios please set this*/

     [webViewFirst setOpaque:NO];

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

9

En plus de définir l'arrière-plan de votre vue Web sur une couleur claire, assurez-vous également de définir opaque sur false.


Merci pour votre réponse, mais opaque n'est pas défini sur Interface Builder.
VansFannel

Essayez de le définir après avoir appelé [super viewDidLoad: animated]; .
Elegia

Salut, j'ai le même problème .. fonctionne sur ios5 mais fond gris sur ios4. Comment l'avez-vous résolu?
user542584

3
webView.opaque = NO;

webView.backgroundColor = [UIColor clearColor];

3

Vous pouvez essayer ce code (je sais, qu'il n'est pas sûr, mais cela fonctionne même pour 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

Pour objectif

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

Veuillez vous assurer de l'inclure dans votre code HTML:

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

ou

 <body style="background:none">

0

Dernière version de Swift (au besoin):

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

Supprimer la ligne de délégué si cela n'est pas obligatoire

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.