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?

Knodel
quelle

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;">
Ortwin Gentz
quelle
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];
  }
}
Nilesh Kikani
quelle
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
}
kmiklas
quelle
1
Ich musste keinen Körperstil einstellen. Aber ich musste Hintergrundfarbe und undurchsichtigen Code einstellen.
Andrej
5

Für Swift 3 und Xcode 8

self.webView.isOpaque = false;
self.webView.backgroundColor = UIColor.clear
Museer Ahamad Ansari
quelle
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

Pyae Thu Aung
quelle
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];
Xavier John
quelle
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];  
               }  
          }  
     }   
}  
damithH
quelle
0

In Swift 4.x

webView.backgroundColor = .clear
openSourceLicensesWebView.isOpaque = false
yo2bh
quelle