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?

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

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

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
}

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


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


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

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

0

Dans Swift 4.x,

webView.backgroundColor = .clear
openSourceLicensesWebView.isOpaque = false
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.