2010-01-16 21 views
15

Mi piacerebbe utilizzare un'immagine fissa come sfondo in una visualizzazione tabella raggruppata semplice nel mio programma iPhone. Sfortunatamente, non importa quello che faccio, lo sfondo è sempre bianco fisso. Ho seguito diverse soluzioni presunte su questo sito e altri senza alcun risultato. Ecco il codice relavant nel metodo viewDidLoad della classe vista della tabella di controllo (nota, questo codice utilizza un colore blu solido piuttosto che un'immagine per semplicità):Aggiungi UIView dietro UITableView nel codice UITableViewController

self.tableView.opaque = NO; 
self.tableView.backgroundColor = [UIColor clearColor]; 
UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; 
backgroundView.backgroundColor = [UIColor blueColor]; 
[self.tableView.window addSubview:backgroundView]; 
[backgroundView release]; 

ho il sospetto che non sto posizionando il backgroundView guarda nel posto giusto. Ho provato sendToBack :, bringToFront :, e altri, ma ottengo sempre uno sfondo bianco. È possibile farlo dall'interno di UITableViewController? Devo usare Interface Builder?

risposta

19

Usa UITableView s' subviews proprietà per aggiungere lo sfondo c'è:

[self.tableView addSubview:backgroundView]; 
[self.tableView sendSubviewToBack:backgroundView]; 

Inoltre, il vostro cellulare/intestazione ecc avrà probabilmente bisogno di essere impostato a trasparente per il vostro backgroundView sia visibile.

+0

La proprietà 'subviews' restituisce un' NSArray', che non risponde al metodo '-addSubview:'. –

+0

Buona cattura - riparato. Hai solo bisogno del metodo 'addSubview' di un' UIView'. –

3

Vorrei semplicemente impostare la proprietà backgroundColor di UITableView. È possibile utilizzare il metodo di UIColor +colorWithPatternImage: per convertire un UIImage in un UIColor (che si ripeterà tutta la vista, se non abbastanza grande):

// From within UITableViewController's -viewDidLoad: 
UIImage *image = [UIImage imageNamed:"yourImage.png"]; 
self.tableView.backgroundColor = [UIColor colorWithPatternImage:image];

Basta aggiungere yourImage.png e [email protected] al vostro pacchetto di applicazioni, dimensioni in modo appropriato, e sei tutto pronto

+1

Ciò risulta in qualcosa di estremamente strano. –

+0

Sembra funzionare solo per gli spazi tra le celle. L'intestazione della tabella, le intestazioni di sezione e lo spazio su entrambi i lati delle celle non corrispondono all'immagine. –

+0

Renderà il colore in base allo spazio visibile disponibile, in modo che l'immagine appaia "incollata" alle righe superiore o inferiore della tabella. – leolobato

14

A partire da iOS 3.2 il UITableView ha una proprietà denominata backgroundView. Così, invece di aggiungere un eventuale subviews, solo fare questo:

self.tableView.backgroundView = backgroundView; 

La vista tabella si prenderà cura di ridimensionare la vista sfondo alla dimensione della tabella. La vista di sfondo non si muoverà con le celle della tabella. In altre parole, se la vista di sfondo è una vista dell'immagine, l'immagine sembrerà bloccata sullo schermo con le celle che scivolano su di essa. Anche le visualizzazioni di tabella predefinite sembrano avere la capacità di rendere automaticamente chiari gli elementi appropriati della cella se è presente una vista di sfondo.

+0

L'impostazione dello sfondoColore utilizzando un'immagine provoca problemi nelle aree esterne di ogni riga di celle. Funziona alla grande – nh32rg

+0

Per me in iOS7/8 se imposto lo sfondoView copre le celle. –

Problemi correlati