2013-05-06 4 views
5

Attualmente ho un view controller che è composto da un Navigation bar, seguito da un UIView che ha due UIButtons aggiunto come subViews. C'è poi un UITableView sotto che inizia nella parte inferiore del contenitore UIView.Effettuare scorrimento UIView con UITableView ma pin to top out of

Al momento, quando l'utente scorre lo UITableView passa dietro allo UIView e UIButtons. Quello che in realtà voglio succedere è che lo UIView e lo UIButtons si spostino verso l'alto con la vista tabella ma solo per il valore della loro altezza che in questo caso è 58 pixel. Il flusso sarebbe così ...

1) I rotoli di tabella e lo UIView si spostano con esso per i primi 58 pixel.

2) L'utente continua a scorrere la tabella ma gli "spilli" UIView "soli" appena fuori visualizzazione sotto lo navigation bar.

3) Quando l'utente scorre la tabella, lo UIView viene prelevato e trascinato in vista. Credo che la nuova app di Facebook faccia qualcosa di simile nella timeline.

Non voglio impostare UIView come TableHeaderView della tabella poiché dispongo anche di un pull-to-refresh che quindi si trova sopra i pulsanti e sembra terribile. Ho provato a giocare con le proprietà contentOffset del sottostante scrollview della tabella, ma ho colpito un muro di mattoni.

Qualsiasi consiglio su dove iniziare sarebbe apprezzato.

Grazie

EDIT: Sto ottenuto un po 'oltre e utilizzando questo codice per spostare la cornice del UIView.

-(void) scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    NSLog (@"Content Offset: %f", self.tableView.contentOffset.y); 
    NSLog (@"Button Frame: %f", self.btnBackground.frame.origin.y); 

     if (self.tableView.contentOffset.y > 0) 
     { 
      CGRect newFrame = self.btnBackground.frame; 
      newFrame.origin.x = 0; 
      newFrame.origin.y = -self.tableView.contentOffset.y; 
      [self.btnBackground setFrame: newFrame]; 
     } 

} 

Il problema ora è che il metodo delegato scrollViewDidScroll non viene licenziato abbastanza in fretta se la visualizzazione della tabella viene fatto scorrere veloce. Il risultato è che UIView non torna completamente alla sua posizione originale quando scorre rapidamente.

+1

Ehi, sto cercando di affrontare un problema simile in questo momento. Hai mai capito cosa fare? @paulmorris – Thomas

+0

Domanda correlata: http://stackoverflow.com/questions/25374090/move-a-view-when-scrolling-in-uitableview –

+0

Ehi, anche io sono venuto a una situazione simile. Il progettista vuole che il layout si comporti esattamente come CoordinatorLayout in Android. Btw l'hai capito? –

risposta

0

Bene ha fatto la domanda (y) bene, per me vorrei prima: utilizzare un principale UIScrollView che contiene sia il vostro Topview e tableView sotto di essa e che ha la stessa larghezza la tua top UIView e UITableView e impostare l'altezza a essere altezza (tableView) + height (topView). Secondo: poiché è una sottoclasse di UISCrollView, è possibile utilizzare il delegato scrollViewDidScroll per sapere se la vista tabella è scorsa verso l'alto o verso il basso. in questo cas si avrà due casi:

1) Tableview viene fatta scorrere verso l'alto => si imposta il contenuto offset del ScrollView principale di essere

[scrollView setContentOffset:CGPointMake(0, 58) animated:YES]; 

2) quando la visualizzazione della tabella viene fatta scorrere verso il basso si è possibile ripristinare nuovamente l'offset del contenuto

[scrollView setContentOffset:CGPointMake(0, 0) animated:YES]; 
+0

Grazie per la risposta, ma questo non scorre automaticamente la vista dall'alto con la tabella e la vista di scorrimento. Tutto ha bisogno di apparire essenzialmente come l'UIView fa parte del TableView e scorre perfettamente con esso. –

0

L'offset del contenuto di scorrimento è una buona idea. Inoltre, se tableview ha solo un approccio di sezione uno è quello di fare una vista di intestazione personalizzata che rappresenta i widget di primo livello. Se sono presenti più sezioni, creare una sezione vuota aggiuntiva che restituisca l'intestazione personalizzata.

È possibile fare riferimento a questo post di overflow dello stack. Customize UITableview Header Section

Problemi correlati