Cách tạo UIWebView minh bạch


117

Tôi có một ứng dụng với một UITableViewvà một chế độ xem chi tiết tương ứng cho mỗi hàng. Trong chế độ xem chi tiết, tôi phải hiển thị một số văn bản và hình ảnh nền (văn bản khác nhau cho mỗi hàng, nhưng hình ảnh vẫn giống nhau). Theo tôi, cách dễ nhất là đặt văn bản vào tệp .rtf và hiển thị nó trong a UIWebView. Sau đó, chỉ cần đặt một UIImageViewđằng sau UIWebView.

Tôi đã cố gắng đặt UIWebViewđộ mờ của 'bằng 0 trong IB, nhưng không giúp được gì.

Bạn có thể giúp tôi được không?

Câu trả lời:


302

Tôi khuyên bạn nên:

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

(đặt các thuộc tính này trong Trình tạo giao diện sẽ hoạt động cho iOS 5.0+, nhưng đối với iOS 4.3, bạn phải đặt Màu nền trong mã )

Và bao gồm điều này vào mã HTML của bạn:

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

Hoạt động iOS 5. Ít nhất là trong trình mô phỏng.
Jason McCreary

1
Tôi đã có thể đặt opacity và backgroundColor trong IB. Đối với tôi, thẻ phong cách là thứ đã ngăn điều này hoạt động.
devinfoley

cách này hoạt động cho 4.2.1 nếu bạn chỉ viết các chuỗi này dưới dạng mã. Nếu bạn thiết lập các tùy chọn tương tự trong iterface builder hơn bạn sẽ không nhận được một nền trong suốt
Gargo

2
Các <body style="background-color: transparent;">có vẻ là không bắt buộc, ít nhất là trong các phiên bản iOS mới.
zeroimpl

21

Sử dụng phương pháp đệ quy bên dưới để loại bỏ gradient khỏi 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];
  }
}

đừng quên viết webView.opaque = NO;
Nilesh Kikani

1
Uh, chúng ta đang nói về "gradient" nào ở đây?
Greg Maletic

7

Cập nhật nhanh chóng:

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

Và một lần nữa, đừng quên đặt

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

Hoặc tốt hơn nữa, thay vì một kiểu nội tuyến, trong trang định kiểu của bạn:

body {
     background-color: transparent
}

1
Tôi không cần thiết lập phong cách cơ thể. Nhưng tôi phải thiết lập màu nền và mã mờ đục.
Andrej

5

Đối với Swift 3 và Xcode 8

self.webView.isOpaque = false;
self.webView.backgroundColor = UIColor.clear

4

Trong XCode 6.x, bỏ chọn Opaque và thay đổi độ mờ của Background thành 0% . Tôi nghĩ rằng các phiên bản XCode khác cũng sẽ hoạt động.nhập mô tả hình ảnh ở đây


3

Tôi đã có thể làm cho UIWebView của mình trong suốt bằng cách đi tới 'Trình kiểm tra thuộc tính' và bỏ chọn Bản vẽ đục.

Mã HTML của tôi chỉ để tham khảo.

    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

Để loại bỏ các cuộn và làm cho trong UIWebViewsuốt, hãy thử mã này bên dưới:

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

Trong Swift 4.x,

webView.backgroundColor = .clear
openSourceLicensesWebView.isOpaque = false
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.