Comment créer une UIWebView transparente

117

J'ai une application avec un UITableViewet une vue détaillée correspondante pour chaque ligne. Dans la vue détaillée, je dois afficher du texte et une image d'arrière-plan (le texte est différent pour chaque ligne, mais l'image reste la même). Le moyen le plus simple, à mon avis, est de mettre le texte dans un fichier .rtf et de l'afficher dans un fichier UIWebView. Ensuite, mettez simplement un UIImageViewderrière le UIWebView.

J'ai essayé de régler l' UIWebViewopacité de la sur zéro dans IB, mais cela n'a pas aidé.

Pouvez-vous m'aider?

Knodel
la source

Réponses:

302

Je recommande:

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

(la définition de ces propriétés dans Interface Builder fonctionnera pour iOS 5.0+, mais pour iOS 4.3, vous devez définir backgroundColor dans le code )

Et incluez ceci dans votre code HTML:

<body style="background-color: transparent;">
Ortwin Gentz
la source
Fonctionne iOS 5. Au moins dans le simulateur.
Jason McCreary
1
J'ai pu définir l'opacité et backgroundColor dans IB. Pour moi, la balise de style était ce qui empêchait cela de fonctionner.
devinfoley
cette méthode fonctionne pour 4.2.1 si vous écrivez ces chaînes sous forme de code uniquement. Si vous configurez les mêmes options dans iterface builder, vous n'obtiendrez pas un arrière
Gargo
2
Le <body style="background-color: transparent;">semble être facultatif, du moins dans les versions récentes d'iOS.
zeroimpl
21

Utilisez la méthode récursive ci-dessous pour supprimer le dégradé de 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
la source
n'oubliez pas d'écrire webView.opaque = NO;
Nilesh Kikani
1
Euh, de quel "gradient" parle-t-on ici?
Greg Maletic
7

Mise à jour rapide:

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

Et encore une fois, n'oubliez pas de définir

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

Ou mieux encore, au lieu d'un style en ligne, dans votre feuille de style:

body {
     background-color: transparent
}
kmiklas
la source
1
Je n'avais pas besoin de définir le style du corps. Mais j'ai dû définir la couleur de fond et l'opaque dans le code.
Andrej
5

Pour Swift 3 et Xcode 8

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

Dans XCode 6.x, décochez Opaque et modifiez l'opacité de l'arrière-plan à 0% . Je pense que d'autres versions de XCode fonctionneront également.entrez la description de l'image ici

Pyae Thu Aung
la source
3

J'ai pu rendre mon UIWebView transparent en accédant à «Inspecteur d'attributs» et en décochant l'option Dessin opaque.

Mon code HTML juste pour référence.

    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
la source
0

Pour supprimer les parchemins et rendre le UIWebViewtransparent, essayez ce code ci-dessous:

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
la source
0

Dans Swift 4.x,

webView.backgroundColor = .clear
openSourceLicensesWebView.isOpaque = false
yo2bh
la source