Jak stworzyć przejrzysty UIWebView

117

Mam aplikację z UITableViewodpowiednim widokiem szczegółów dla każdego wiersza. W widoku szczegółowym muszę wyświetlić tekst i obraz w tle (tekst jest inny dla każdego wiersza, ale obraz pozostaje taki sam). Moim zdaniem najłatwiejszym sposobem jest umieszczenie tekstu w pliku .rtf i wyświetlenie go w formacie UIWebView. Następnie po prostu umieść UIImageViewza UIWebView.

Próbowałem ustawić UIWebViewkrycie na zero w IB, ale to nie pomogło.

Możesz mi pomóc?

Knodel
źródło

Odpowiedzi:

302

Polecam:

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

(ustawienie tych właściwości w Interface Builder będzie działać dla iOS 5.0+, ale dla iOS 4.3 musisz ustawić backgroundColor w kodzie )

I umieść to w swoim kodzie HTML:

<body style="background-color: transparent;">
Ortwin Gentz
źródło
Działa na iOS 5. Przynajmniej w symulatorze.
Jason McCreary,
1
Udało mi się ustawić krycie i backgroundColor w IB. Dla mnie tag stylu był tym, co powstrzymywało to przed działaniem.
devinfoley
ten sposób działa dla 4.2.1, jeśli napiszesz te ciągi tylko jako kod. Jeśli ustawisz te same opcje w narzędziu iterface builder, nie otrzymasz przezroczystego tła
Gargo
2
<body style="background-color: transparent;">Wydaje się być opcja, przynajmniej w ostatnich wersjach iOS.
zeroimpl
21

Użyj metody rekurencyjnej poniżej, aby usunąć gradient z UIWebView:

[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
źródło
nie zapomnij napisać webView.opaque = NIE;
Nilesh Kikani,
1
Uh, o jakim „gradiencie” mówimy tutaj?
Greg Maletic
7

Szybka aktualizacja:

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

I znowu, nie zapomnij ustawić

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

Albo jeszcze lepiej, zamiast stylu wbudowanego w swoim arkuszu stylów:

body {
     background-color: transparent
}
kmiklas
źródło
1
Nie musiałem ustalać stylu ciała. Ale musiałem ustawić kolor tła i nieprzezroczysty w kodzie.
Andrej
5

Dla Swift 3 i Xcode 8

self.webView.isOpaque = false;
self.webView.backgroundColor = UIColor.clear
Museer Ahamad Ansari
źródło
4

W Xcode 6.x usuń zaznaczenie opcji Opaque i zmienić przezroczystość tła jest na 0% . Myślę, że inne wersje XCode też będą działać.wprowadź opis obrazu tutaj

Pyae Thu Aung
źródło
3

Udało mi się uczynić mój UIWebView przezroczystym, przechodząc do „Attributes Inspector” i odznaczając Drawing Opaque.

Mój kod HTML tylko w celach informacyjnych.

    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
źródło
0

Aby usunąć zwoje i uczynić UIWebViewprzezroczystym, wypróbuj poniższy kod:

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
źródło
0

W Swift 4.x,

webView.backgroundColor = .clear
openSourceLicensesWebView.isOpaque = false
yo2bh
źródło