So erstellen Sie eine transparente UIWebView


117

Ich habe eine App mit einer UITableViewund einer entsprechenden Detailansicht für jede Zeile. In der Detailansicht muss ich Text und ein Hintergrundbild anzeigen (Text ist für jede Zeile unterschiedlich, aber das Bild bleibt gleich). Meiner Meinung nach ist es am einfachsten, den Text in eine RTF-Datei einzufügen und in einer UIWebView. Dann setzen Sie einfach eine UIImageViewhinter die UIWebView.

Ich habe versucht, die UIWebViewDeckkraft des IB in IB auf Null zu setzen, aber es hat nicht geholfen.

Können Sie mir helfen?

Antworten:


302

Ich empfehle:

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

(Das Festlegen dieser Eigenschaften in Interface Builder funktioniert für iOS 5.0+, für iOS 4.3 müssen Sie jedoch die Hintergrundfarbe im Code festlegen. )

Und fügen Sie dies in Ihren HTML-Code ein:

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

Funktioniert mit iOS 5. Zumindest im Simulator.
Jason McCreary

1
Ich konnte Deckkraft und Hintergrundfarbe in IB einstellen. Für mich war das Style-Tag das, was dies davon abhielt, zu funktionieren.
Devinfoley

Diese Methode funktioniert für 4.2.1, wenn Sie diese Zeichenfolgen nur als Code schreiben. Wenn Sie im iterface builder dieselben Optionen einrichten, erhalten Sie keinen transparenten Hintergrund
Gargo

2
Das <body style="background-color: transparent;">scheint zumindest in den letzten iOS-Versionen optional zu sein.
Zeroimpl

21

Verwenden Sie die folgende rekursive Methode, um den Farbverlauf aus UIWebView zu entfernen:

[webView setBackgroundColor:[UIColor clearColor]];
[self hideGradientBackground:webView];


- (void) hideGradientBackground:(UIView*)theView
{
  for (UIView * subview in theView.subviews)
  {
    if ([subview isKindOfClass:[UIImageView class]])
      subview.hidden = YES;

    [self hideGradientBackground:subview];
  }
}

Vergessen Sie nicht, webView.opaque = NO zu schreiben.
Nilesh Kikani

1
Äh, über welchen "Gradienten" sprechen wir hier?
Greg Maletic

7

Schnelles Update:

webView.opaque = true
webView.backgroundColor = UIColor.clearColor()

Und wieder nicht vergessen zu setzen

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

Oder noch besser, anstelle eines Inline-Stils in Ihrem Stylesheet:

body {
     background-color: transparent
}

1
Ich musste keinen Körperstil einstellen. Aber ich musste Hintergrundfarbe und undurchsichtigen Code einstellen.
Andrej


4

In XCode 6.x deaktivieren Opaque und ändern Hintergrund der Opazität auf 0% . Ich denke, andere XCode-Versionen werden auch funktionieren.Geben Sie hier die Bildbeschreibung ein


3

Ich konnte mein UIWebView transparent machen, indem ich zu 'Attributes Inspector' ging und das Kontrollkästchen Drawing Opaque deaktivierte.

Mein HTML-Code nur als Referenz.

    UIWebView* webView =(UIWebView *) [cell viewWithTag:100];
    NSString* htmlContentString = [NSString stringWithFormat:
                                   @"<html>"
                                   "<style type='text/css'>html,body {margin: 0;padding: 0;width: 100%%;height: 100%%;}</style>"
                                   "<body>"
                                   "<table style='border:1px solid gray; border-radius: 5px; overflow: hidden;color:white;font-size:10pt' cellspacing=\"0\" cellpadding=\"1\" align='right'><tr>"
                                   "<td>Hello</td><td>There</td>"
                                   "</tr></table>"
                                   "</body></html>"
                                   ];
    [webView loadHTMLString:htmlContentString baseURL:nil];

0

UIWebViewVersuchen Sie diesen Code, um die Schriftrollen zu entfernen und transparent zu machen :

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

for(UIView *view in webView.subviews){   
     if ([view isKindOfClass:[UIImageView class]]) {  
          // to transparent   
          [view removeFromSuperview];  
     }  
     if ([view isKindOfClass:[UIScrollView class]]) {  
          UIScrollView *sView = (UIScrollView *)view;  
          //to hide Scroller bar 
          sView.showsVerticalScrollIndicator = NO;  
          sView.showsHorizontalScrollIndicator = NO;
          for (UIView* shadowView in [sView subviews]){  
               //to remove shadow  
               if ([shadowView isKindOfClass:[UIImageView class]]) {  
                    [shadowView setHidden:TRUE];  
               }  
          }  
     }   
}  

0

In Swift 4.x

webView.backgroundColor = .clear
openSourceLicensesWebView.isOpaque = false
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.