2010-09-05 36 views
111

Tôi có một ứng dụng có một số UITableView và 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 nền (văn bản khác nhau cho mỗi hàng, nhưng hình ảnh vẫn giữ nguyên). Cách dễ nhất, theo ý kiến ​​của tôi, là đặt văn bản trong một tệp .rtf và hiển thị nó trong một UIWebView. Sau đó, chỉ cần đặt UIImageView phía sau UIWebView.Cách tạo UIWebView trong suốt

Tôi đã cố gắng đặt độ mờ của UIWebView thành 0 trong IB, nhưng không hiệu quả.

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

Trả lời

293

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

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

(thiết lập các thuộc tính trong giao diện Builder sẽ làm việc cho iOS 5.0+, nhưng đối với iOS 4.3, bạn phải thiết lập các backgroundColor trong mã)

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

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

trình iOS 5. Ít nhất trong mô phỏng. –

+3

không hoạt động đối với tôi trong iOS 5 –

+1

Tôi đã có thể đặt độ mờ và màu nền trong IB. Đối với tôi, thẻ kiểu là thứ giữ cho nó không hoạt động. – devinfoley

21

Sử dụng phương pháp đệ quy dưới đây để loại bỏ gradient từ 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]; 
    } 
} 
+0

hoạt động cho tôi trong trình mô phỏng.Chưa thử nghiệm trên thiết bị. – zumzum

+1

Nó cũng sẽ hoạt động trên thiết bị !!!! –

+0

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

0

Để tháo cuộn và làm cho UIWebView minh bạch, thử mã này dưới đây:

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]; 
               } 
          } 
     } 
} 
2

tôi đã có thể làm cho UIWebView của tôi trong suốt bằng cách vào 'Attributes Inspector' và bỏ chọn Vẽ Opaque.

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]; 
7

Swift Cập nhật:

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

Và một lần nữa, đừng quên để thiết lập

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

Hoặc vẫn tốt hơn, thay vì một phong cách nội tuyến, trong bảng phong cách của bạn:

body { 
    background-color: transparent 
} 
+1

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

4

Trong XCode 6.x bỏ chọn Opaque và thay đổi Độ mờ của nền đến 0%. Tôi nghĩ rằng các phiên bản XCode khác cũng sẽ hoạt động. enter image description here

4

Đối Swift 3 và Xcode 8

self.webView.isOpaque = false; 
self.webView.backgroundColor = UIColor.clear 
Các vấn đề liên quan