2009-09-03 5 views

risposta

3

In un altro progetto (sviluppato utilizzando 2.2.1) l'ho fatto impostando l'opacità di sfondo dello UITableView' su 0% e quindi semplicemente sovrapponendo uno UIImageView utilizzando Interface Builder. Questo mi ha permesso di avere uno sfondo fisso indipendentemente dallo stato della tabella. Puoi anche impostare lo sfondo di UITableView come immagine, ma lo sfondo scorre con la tabella. (Non ho il codice a portata di mano al momento, ma ho avuto la punta un po 'indietro nei forum degli sviluppatori Apple).

Si noti che questo può causare alcuni problemi di prestazioni. Apple scoraggia l'uso della trasparenza quando possibile, perché le GPU sui modelli pre-3GS non sono particolarmente robuste.

3

È possibile utilizzare il metodo +[UIColor colorWithPatternImage:(UIImage)] in questo modo:

self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Background.png"]]; 
2
self.parentViewController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"SortByCategory_320x480.png"]]; 

self.tableView.separatorColor = [UIColor clearColor]; 

self.tableView.backgroundColor = [UIColor clearColor]; 

Spero che questo possa essere d'aiuto. Non mostrerà orribile sfondo traslucido dietro le celle, specialmente in caso di UITableView raggruppato.

+4

Accesso parentViewController.view è una pessima idea - non si sa che tipo di sostegno che ha, ed è una violazione piuttosto male di incapsulamento. Anche se funziona ora, il prossimo aggiornamento iOS potrebbe violare completamente il codice. Non farlo. –

24

Ecco cosa ha funzionato per me (e abbastanza semplice, una volta ho capito;)

1) Aggiungere una vista nella vostra applicazione delegato e ne fanno una visualizzazione secondaria della finestra:

UIView *bgView = [[UIView alloc]initWithFrame:window.frame]; 

bgView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"screenBG.png"]]; 
[window addSubview:bgView]; 
[bgView release]; 

2) su ciascun file .m View Controller, sotto viewDidLoad, impostare il colore di quel particolare vista trasparente (sfondo così l'altro bgView creato in precedenza sarà visibile attraverso):

self.view.backgroundColor = [UIColor clearColor]; 

E nel mio caso, la v Il controller di Iew nel passaggio 2 era un controller di tabellaview. Sembra fantastico.

E BTW, effettuando le seguenti operazioni in ciascun controller di vista non ha funzionato bene:

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"screenBG.png"]]; 

in modo da seguire i punti 1 e 2 di cui sopra.

Spero che questo aiuta, Tbone

+0

Mi piace questo trucco. – winnicki

+2

Nel delegato dell'app è anche possibile eseguire più facilmente: self.window.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed: @ "bg.png"]]; –

+0

Sono d'accordo con Gil Margolin qui ... era più facile impostare lo sfondo della finestra Colore come immagine. Con un avvertimento: devi caricare manualmente l'immagine corretta per retina/iphone5, il che ha complicato un po 'le cose. –

9

Prova questa

- (void) viewDidLoad { 
    [super viewDidLoad]; 

    self.tableView.backgroundColor = [UIColor clearColor]; 
    self.view.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"wallpaper.png"]]; 
    self.tableView.opaque = NO; 
} 
+0

È inoltre possibile aggiungere una vista immagine dietro la vista tabella anziché impostare un colore di sfondo, che consente di evitare l'uso di un'immagine di motivo. – TigerCoding