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?

VansFannel
la source
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
1
duplication possible de Comment faire un UIWebVIew transparent
Vladimir

Réponses:

360

Définissez également:

[webView setBackgroundColor:[UIColor clearColor]];
[webView setOpaque:NO];
Maulik
la source
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">
Dheerendra
la source
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.

Elegia
la source
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];
Avinash651
la source
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]];
}

Artem Stepanenko
la source
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];
utilisateur5742417
la source
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">
Amr en colère
la source
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

RichAppz
la source