Iphone: come scorrere fino alla prima cella della seconda sezione, lasciando che l'intestazione della prima sezione visibile

StackOverflow https://stackoverflow.com/questions/4597839

Domanda

Ho un UITableView con righe e le sezioni. Vorrei scorrere fino al primo punto della seconda sezione, lasciando che l'intestazione della prima sezione visibile. Come se avessi scorrere manualmente l'elenco fino a raggiungere quello stato.

---- TOP OF SCREEN ----
Header of first section
Header of the second section
cell 1
cell 2
cell 3
Header of the third section
cell 1
cell 2
...

scrollToRowAtIndexPath: [NSIndexPath indexPathForRow: 0 inSection: 1] non fare il lavoro, si nasconde l'intestazione della prima sezione.

È stato utile?

Soluzione

Ci stiamo muovendo su. Ho trovato questo metodo basato su un'idea di Kevin. Per essere in grado di impostare animato a YES, prendo la fine di animazione utilizzando un metodo delegato di UIScrollView. Funziona. Ma qualsiasi soluzione che aiuterebbe non fare 2 animazioni sarebbe molto apprezzato. Qualche idea su come fare questo?

- (IBAction) scrollToToday:(BOOL)animate {
    [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1] atScrollPosition:UITableViewScrollPositionTop animated:animate];
    if (animate == NO) [self showFirstHeaderLine:NO];
}

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
    [self showFirstHeaderLine:YES];
}

- (void) showFirstHeaderLine:(BOOL)animate {
    CGRect headerRect = [self.tableView rectForHeaderInSection:1];
    CGPoint scrollPoint = headerRect.origin;
    scrollPoint.y -= headerRect.size.height;
    [self.tableView setContentOffset:scrollPoint animated:animate];
}

Amico a questo codice, il processo quando animato è impostato su SI deve essere ripetuto all'infinito beetween scrollViewDidEndScrollingAnimation e showFirstHeaderLine ... E 'loop, sì, ma solo una volta ... Qualche idea sul perché?

Altri suggerimenti

È possibile prendere il rettangolo per la riga che si desidera, quindi sottrarre l'altezza dell'intestazione della sezione precedente e scorrere fino a quel punto. Qualcosa di simile a quanto segue (non testato) dovrebbe funzionare:

CGRect rowRect = [table rectForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]];
CGRect headerRect = [table rectForHeaderInSection:0];
rowRect.origin.y -= headerRect.size.height;
rowRect.size.height += headerRect.size.height;
[table scrollRectToVisible:rowRect animated:YES]; // UITableView is a subclass of UIScrollView

Ho cercato il tuo codice, e funziona !!

Per la questione del ciclo, dal momento che si sta impostando un offset (SetContentOffset), non ha nulla a che fare con la pergamena. Non è chiamerà ScrollView delegato. SO lo scrollViewDidEndScrollingAnimation sarà chiamato solo una volta, che è stato chiamato da scrollToRowAtIndexPath.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top