Come creare un UIWebView trasparente


117

Ho un'app con una UITableViewvisualizzazione dei dettagli corrispondente per ogni riga. Nella visualizzazione dei dettagli devo visualizzare del testo e un'immagine di sfondo (il testo è diverso per ogni riga, ma l'immagine rimane la stessa). Il modo più semplice, a mio parere, è inserire il testo in un file .rtf e visualizzarlo in un file UIWebView. Quindi metti un UIImageViewdietro il UIWebView.

Ho provato a impostare l' UIWebViewopacità di a zero in IB, ma non è stato d'aiuto.

Mi potete aiutare?

Risposte:


302

Io raccomando:

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

(l'impostazione di queste proprietà in Interface Builder funzionerà per iOS 5.0+, ma per iOS 4.3 è necessario impostare backgroundColor nel codice )

E includilo nel tuo codice HTML:

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

Funziona con iOS 5. Almeno nel simulatore.
Jason McCreary

1
Sono stato in grado di impostare l'opacità e backgroundColor in IB. Per me il tag di stile era ciò che impediva il funzionamento.
devinfoley

in questo modo funziona per 4.2.1 se scrivi queste stringhe solo come codice. Se imposti le stesse opzioni in iterface builder, non otterrai uno sfondo trasparente
Gargo

2
L' <body style="background-color: transparent;">sembra essere facoltativa, almeno nelle versioni di iOS più recenti.
zeroimpl

21

Utilizza il metodo ricorsivo di seguito per rimuovere il gradiente da 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];
  }
}

non dimenticare di scrivere webView.opaque = NO;
Nilesh Kikani

1
Uh, di che "gradiente" stiamo parlando qui?
Greg Maletic,

7

Aggiornamento rapido:

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

E ancora, non dimenticare di impostare

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

O meglio ancora, invece di uno stile in linea, nel tuo foglio di stile:

body {
     background-color: transparent
}

1
Non avevo bisogno di impostare lo stile del corpo. Ma ho dovuto impostare il colore di sfondo e l'opaco nel codice.
Andrej


4

In XCode 6.x deseleziona Opaco e cambia l'opacità dello sfondo a 0% . Penso che funzioneranno anche altre versioni di XCode.inserisci qui la descrizione dell'immagine


3

Sono stato in grado di rendere trasparente la mia UIWebView andando su "Attributes Inspector" e deselezionando Drawing Opaque.

Il mio codice HTML solo per riferimento.

    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

Per rimuovere le pergamene e renderle UIWebViewtrasparenti, prova questo codice di seguito:

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

In Swift 4.x,

webView.backgroundColor = .clear
openSourceLicensesWebView.isOpaque = false
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.