2011-12-21 11 views
6

Sto lavorando su un'app che ha molte UITableViews e sto provando a fornire loro un colore di sfondo con texture. Devo usare lo stile Raggruppato perché non voglio che le intestazioni di sezione fluttuino sui campi di testo quando l'utente scorre.Texture di sfondo di un UITableView raggruppato non scorrerà con la tabella

Il problema che sto avendo è che quando uso lo stile Raggruppato, la trama dello sfondo non scorre con la tabella; rimane sul posto mentre la tabella scorre sopra di esso. Sento che questo è un po 'strano e preferirei avere lo sfondo di scorrimento con il tavolo, il modo in cui lo fa in stile Plain. Sfortunatamente, poiché non posso avere le viste di intestazione che galleggiano su tutto, non sembra un'opzione.

Qualcuno è stato in grado di realizzare questo?

Ecco alcuni codice rilevante:

- (void)loadView { 
    [super loadView]; 
    self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
    self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"texturedPattern.png"]]; 
    // this prevents the cells from replicating the background texture 
    self.tableView.backgroundView = [[UIView alloc] initWithFrame:self.view.bounds]; 
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; 
} 

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    // disable the default grouped border since we're doing it manually with the textField 
    cell.backgroundView = nil; 
    cell.backgroundColor = [UIColor clearColor]; 
} 

E la mia vista tabella attualmente appare così: Just to give you an idea...

UPDATE

Come suggerito Amit Vyawahare, ho cercato di applicare la texture di sfondo per lo sfondo delle intestazioni e di ogni cella. Ci sono due problemi che sono entrambi molto più evidenti quando lo vedi in movimento, ma farò del mio meglio.

  • Innanzitutto, lo sfondo è sempre visibile. Ho rimosso il colore di sfondo dal tavolo per renderlo più evidente:

Scrolling areas vs. non-scrolling areas

Ovunque si vede nero, la consistenza del fondo tableView sarebbe visibile e non scorrere con il tavoloView. Lo stile TableView raggruppato inserisce il bordo di 5 pixel su ciascun lato di ogni cella e non può essere modificato. Inoltre, non c'è il piè di pagina sotto la sezione Staff ID e ho anche implementato -tableView:heightForFooterInSection: per restituire 0.0, ma c'è ancora un vuoto lì.

  • In secondo luogo, anche se sono stato in grado di eliminare queste interruzioni, le trame non si allineano comunque. Di nuovo, questo è difficile da vedere, così ho caricato uno schermo retina colpo per renderlo un po 'più facile:

if you squint, you'll see a totally rad 3d image!

Questo è più evidente sopra la sezione password, è possibile vedere le texture don essere allineato correttamente e sembra un po 'come una "piega" sulla carta. Sarebbe bello, immagino, se fosse quello che voleva il cliente. È visibile, ma meno ovvio su quasi tutti i fronti dalla seconda schermata. Questo perché la trama è in realtà piuttosto grande: 200x200 (400x400 @ 2x), e ci sono lievi variazioni di colore che non si notano a meno che non si verifichi questo tipo di disallineamento a.

+0

Perché non riesci a creare una cella Costume con lo sfondo della trama? – AAV

+0

Lo sfondo con texture è in realtà piuttosto grande, 200x200. Anche se fossi in grado di applicarlo sullo sfondo di ogni cella e di ogni intestazione e piè di pagina dell'intera app, che sono sicuro sarebbe un TONO di lavoro, saresti in grado di dire da dove ogni cellula ha avuto inizio perché il ripetersi le trame non si allineano correttamente. –

+0

200x200 non è grande. Sto facendo una cosa simile è il mio progetto. Crea una cella Costume scarica tutte le informazioni che vuoi e usa quella cella in TableVIew. Se ancora non riesci a farlo, scarica il codice e fammi vedere quanto è difficile fare la mia soluzione. – AAV

risposta

0

Sostituisci prima UITableViewController con un UIViewController e aggiungi un UITableView. Imposta la maschera di autorizzazione su larghezza/altezza flessibili. Ora hai qualcosa di equivalente a un UITableViewController, ma con più controllo sulla gerarchia della vista.

Quindi aggiungi una vista sotto la vista tabella (in realtà: aggiungi prima quella che contiene lo sfondo.

Infine, impostare il delegato della vista scorrevole sulla classe e rispondere agli eventi di scorrimento aggiornando di conseguenza la vista di sfondo.

+0

Ho preso la tua idea e ci ho provato. –

+0

1. Convertire la vista da una sottoclasse di UITableViewController in una sottoclasse di UIViewController. 2. Aggiungi un UIScrollView con la texture dietro al tableview. 3. Osservare e sincronizzare le modifiche a 'contentSize' di tableView e' contentOffset' a scrollView. 4. Osservare l'aspetto della tastiera e modificare la cornice del TableView. Ora, ho intenzione di consolidare quel codice in una classe, quindi non devo ripeterlo su ogni vista nell'app. –

Problemi correlati