Как сделать прозрачный UIWebView

117

У меня есть приложение с UITableViewсоответствующим подробным представлением для каждой строки. В подробном представлении мне нужно отобразить текст и фоновое изображение (текст разный для каждой строки, но изображение остается тем же). На мой взгляд, самый простой способ - поместить текст в файл .rtf и отобразить его в формате UIWebView. Тогда просто поставьте UIImageViewпозади UIWebView.

Я пытался установить UIWebViewнепрозрачность на ноль в IB, но это не помогло.

Вы можете помочь мне?

Knodel
источник

Ответы:

302

Я рекомендую:

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

(установка этих свойств в Interface Builder будет работать для iOS 5.0+, но для iOS 4.3 вы должны установить backgroundColor в коде )

И включите это в свой HTML-код:

<body style="background-color: transparent;">
Ортвин Генц
источник
Работает iOS 5. По крайней мере в симуляторе.
Джейсон МакКрири
1
Я смог установить непрозрачность и backgroundColor в IB. Для меня тег стиля был тем, что мешало этому работать.
devinfoley
этот способ работает для 4.2.1, если вы пишете эти строки только как код. Если вы настроите те же параметры в iterface builder, вы не получите прозрачный фон
Гарго
2
<body style="background-color: transparent;">, Кажется, необязательно, по крайней мере в последних версиях IOS.
zeroimpl
21

Используйте рекурсивный метод ниже, чтобы удалить градиент из 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];
  }
}
Нилеш Кикани
источник
не забудьте написать webView.opaque = NO;
Nilesh Kikani
1
О каком «градиенте» мы здесь говорим?
Грег Малетик,
7

Быстрое обновление:

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

И снова не забудьте установить

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

Или, что еще лучше, вместо встроенного стиля в вашей таблице стилей:

body {
     background-color: transparent
}
kmiklas
источник
1
Мне не нужно было задавать стиль тела. Но мне пришлось установить цвет фона и непрозрачность в коде.
Андрей
5

Для Swift 3 и Xcode 8

self.webView.isOpaque = false;
self.webView.backgroundColor = UIColor.clear
Музей Ахамад Ансари
источник
4

В XCode 6.x снимите флажок Opaque и измените непрозрачность фона на 0% . Думаю, подойдут и другие версии XCode.введите описание изображения здесь

Пьяе Тху Аунг
источник
3

Я смог сделать свой UIWebView прозрачным, перейдя в «Инспектор атрибутов» и сняв флажок «Непрозрачный рисунок».

Мой HTML-код только для справки.

    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

Чтобы удалить свитки и сделать UIWebViewпрозрачными, попробуйте следующий код:

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
источник
0

В Swift 4.x

webView.backgroundColor = .clear
openSourceLicensesWebView.isOpaque = false
yo2bh
источник