Bagaimana membuat UIWebView transparan

117

Saya memiliki aplikasi dengan UITableViewdan tampilan detail yang sesuai untuk setiap baris. Dalam tampilan detail saya harus menampilkan beberapa teks dan gambar latar belakang (teks berbeda untuk setiap baris, tetapi gambarnya tetap sama). Cara termudah, menurut saya, adalah dengan meletakkan teks dalam file .rtf dan menampilkannya dalam file UIWebView. Kemudian letakkan saja di UIImageViewbelakang UIWebView.

Saya sudah mencoba untuk mengatur UIWebViewopacity ke nol di IB, tapi itu tidak membantu.

Bisakah kamu membantuku?

Knodel
sumber

Jawaban:

302

Saya merekomendasi:

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

(pengaturan properti ini di Interface Builder akan berfungsi untuk iOS 5.0+, tetapi untuk iOS 4.3 Anda harus mengatur backgroundColor dalam kode )

Dan sertakan ini ke dalam kode HTML Anda:

<body style="background-color: transparent;">
Ortwin Gentz
sumber
Bekerja iOS 5. Setidaknya di simulator.
Jason McCreary
1
Saya bisa mengatur opacity dan backgroundColor di IB. Bagi saya tag gaya itulah yang membuat ini tidak berfungsi.
devinfoley
cara ini berfungsi untuk 4.2.1 jika Anda menulis string ini sebagai kode saja. Jika Anda mengatur opsi yang sama di pembuat iterface daripada Anda tidak akan mendapatkan latar belakang transparan
Gargo
2
The <body style="background-color: transparent;">tampaknya opsional, setidaknya dalam versi iOS baru-baru ini.
zeroimpl
21

Gunakan metode rekursif di bawah ini untuk menghapus gradien dari 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
sumber
jangan lupa untuk menulis webView.opaque = NO;
Nilesh Kikani
1
Eh, "gradien" apa yang kita bicarakan di sini?
Greg Maletic
7

Pembaruan cepat:

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

Dan lagi, jangan lupa set

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

Atau lebih baik lagi, daripada gaya sebaris, di lembar gaya Anda:

body {
     background-color: transparent
}
kmiklas
sumber
1
Saya tidak perlu mengatur gaya tubuh. Tetapi saya harus mengatur warna latar belakang dan buram dalam kode.
Andrej
5

Untuk Swift 3 dan Xcode 8

self.webView.isOpaque = false;
self.webView.backgroundColor = UIColor.clear
Museer Ahamad Ansari
sumber
4

Di XCode 6.x hapus centang Opaque dan ubah opacity Background menjadi 0% . Saya pikir versi XCode lain juga akan berfungsi.masukkan deskripsi gambar di sini

Pyae Thu Aung
sumber
3

Saya bisa membuat UIWebView saya transparan dengan membuka 'Attributes Inspector' dan menghapus centang pada Drawing Opaque.

Kode HTML saya hanya untuk referensi.

    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
sumber
0

Untuk menghapus gulungan dan membuatnya UIWebViewtransparan, coba kode di bawah ini:

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];  
               }  
          }  
     }   
}  
sialan
sumber
0

Di Swift 4.x,

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