Lo sfondo di UIWebView è impostato su Cancella colore, ma non è trasparente


140

Sto sviluppando un'applicazione iOS 4 utilizzando l'ultima versione di iOS SDK e XCode 4.2.

Ho una XIB con a UIWebViewcon Alpha = 1.0 , lo sfondo impostato su Clear Color e Opaque non è impostato. Su questo XIB ho impostato un'immagine come sfondo con questo codice:

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

Il UIWebViewsta mostrando un HTML statico:

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

Sul simulatore iOS 5, lo sfondo è trasparente, ma su un dispositivo iOS 4 è grigio.

Qualche idea?


prova a mettere un UIImageView sulla tua visualizzazione web nel generatore di interfaccia e impostalo come immagine.
Stas,

Grazie per la risposta, ma la visualizzazione Web non occupa l'intero schermo.
VansFannel,

Risposte:


360

Imposta anche:

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

3
Funziona solo se imposto il colore di sfondo e l'opacità dopo aver chiamato loadHTMLString. Sembra che loadHTMLString reimposti entrambi questi valori.
Justin Anderson,

1
So che la domanda era per iOS, ma se per OSX, questa domanda e risposta risolve il problema e può aiutare anche quelli con iOS.
Volomike,

Questa soluzione funziona ancora su 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

Oltre a impostare lo sfondo della visualizzazione Web per cancellare il colore, assicurati di impostare opaco su falso.


Grazie per la risposta, ma Opaque non è impostato su Interface Builder.
VansFannel,

Prova a impostarlo dopo aver chiamato [super viewDidLoad: animato]; .
Elegia,

Ciao, ho lo stesso problema ... funziona su iOS5 ma su sfondo grigio su iOS4. come l'hai risolto?
user542584

3
webView.opaque = NO;

webView.backgroundColor = [UIColor clearColor];

3

Puoi provare questo codice (lo so, non è sicuro, ma funziona anche per 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

Per obiettivo

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

Assicurati di includerlo nel tuo codice HTML:

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

o

 <body style="background:none">

0

Ultima versione Swift (come richiesto):

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

Rimuovere la linea delegata se non richiesta

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.