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.