Tło UIWebView jest ustawione na Clear Color, ale nie jest przezroczyste


140

Tworzę aplikację na iOS 4 przy użyciu najnowszej wersji iOS SDK i XCode 4.2.

Mam XIB z UIWebViewz Alpha = 1,0 , tło zestaw do jasny kolor i Opaque nie jest ustawiony. Na tym XIB ustawiłem obraz jako tło za pomocą tego kodu:

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

UIWebViewPokazuje html statycznej:

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

W symulatorze iOS 5 jego tło jest przezroczyste, ale na urządzeniu iOS 4 jest szare.

Jakaś wskazówka?


spróbuj po prostu umieścić UIImageView na swoim widoku sieciowym w narzędziu do tworzenia interfejsów i ustawić go jako swój obraz.
Staś

Dziękuję za odpowiedź, ale widok sieciowy nie wypełnia całego ekranu.
VansFannel

Odpowiedzi:


360

Ustaw również:

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

3
Działa to tylko dla mnie, jeśli ustawię kolor tła i nieprzezroczystość po wywołaniu loadHTMLString. Wygląda na to, że loadHTMLString resetuje obie te wartości.
Justin Anderson

1
Wiem, że pytanie dotyczyło iOS, ale jeśli w przypadku OSX, to pytanie i odpowiedź rozwiązują problem i mogą również pomóc osobom z iOS.
Volomike

To rozwiązanie nadal działa w iOS 12.1, Xcode 10.1 i Swift.
Bhavin_m,

15
     /*for ios please set this*/

     [webViewFirst setOpaque:NO];

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

9

Oprócz ustawienia czystego koloru tła widoku internetowego, upewnij się również, że ustawiłeś nieprzezroczyste na fałsz.


Dziękuję za odpowiedź, ale nieprzejrzystość nie jest ustawiona w Interface Builder.
VansFannel

Spróbuj ustawić to po wywołaniu [super viewDidLoad: animated]; .
Elegia,

Cześć, mam ten sam problem ... działa na ios5, ale szare tło na ios4. Jak to rozwiązałeś?
user542584


3

Możesz wypróbować ten kod (wiem, że jest niebezpieczny, ale działa nawet na 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

Dla celu

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

Upewnij się, że umieściłeś to w swoim kodzie HTML:

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

lub

 <body style="background:none">

0

Najnowsza wersja Swift (zgodnie z wymaganiami):

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

Usuń linię delegata, jeśli nie jest to wymagane

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.