2016-12-25 2 views
0

Hallo alle zusammen (und Merry Xmas)scrollViewDidScroll wird „zweimal“ genannt nach Settabelle Offset

hoffentlich jemand meine Frage beantworten könnte und das wäre ein großes Weihnachten Geschenk sein.

Mein UIViewController eine Tabelle mit einem Segmentsteuerelement im Tabellenbereich. Es sieht so aus

jedes Mal, wenn Benutzer auf das segmentale Steuerelement klicken, lade ich die Tabellendaten neu und hoffentlich zeigt die Tabelle die richtige Position (nicht genau eine Zeilenposition, also verwende ich Tabelleninhalt Offset). hier ist mein Code:

- (void)clickSegmentedCenter code hereontrol:(int)index { 
    self.firstTableOffset = 72; 
    self.secondTableOffset = 250; 
    self.thirdTableOffset = 600; 

    CGFloat offset_y = 0;   
    switch (index) { 
      case 0: 
       offset_y = self.firstTableOffset; 
       break; 

      case 1: 
       offset_y = self.secondTableOffset; 
       break; 

      case 2: 
       offset_y = self.thirdTableOffset; 
       break; 
    } 

    NSLog(@"[Debug] offset y is %f", offset_y); 

    [self.tableView reloadData]; 
    self.tableView.contentOffset = CGPointMake(0, offset_y); 
} 

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 

    CGPoint offset = scrollView.contentOffset; 
    NSLog(@"[XXX] offset y is %f", offset.y); 
} 

Das Problem I bekam, nachdem Tabellendaten neu geladen wird, scheint es, dass ich nicht die self.tableView.contentOffset sofort anrufen sollte. Mein Tisch scrollt nicht zu der Position, die ich eingestellt habe. Und ich fand scrollViewDidScroll wird zweimal aufgerufen !!! die Log-Nachricht sieht wie folgt aus:

enter image description here

So weiß jemand, was der richtige Weg ist, um die Tabellendaten und blättern Sie in der Tabelle auf die spezifische Position neu zu laden ?? Danke im Voraus.

Update: es stellt sich heraus, dass mein Code korrekt ist. Der Grund dafür ist in meinem viewDidLoad, i gesetzt

self.tableView.estimatedRowHeight = 230.0; 

Und aus irgendeinem Grund, diese Einstellung verursacht das Problem. nachdem ich diese Zeile kommentiert habe, ist das Verhalten korrekt. Ursprünglich habe ich meine Tabelle geschätztRowHeight ist, weil die Höhe meiner Zelle dynamisch ist. Jetzt ist dieses Problem gelöst. Danke für Leute hier für Ihre Ratschläge. Fröhliche Weihnachten !!!

+0

Try scrollToRowAtIndexpath in Tableview zu verwenden. – Arasuvel

+0

könnten Sie bitte Ihren erwarteten Screenshot teilen? –

+0

Hi @Arasuvel, ich behebe das Problem. Der Code ist korrekt. Der Fehler ist von einer anderen Zeile. Ich aktualisiere in der Post. –

Antwort

2

Könnten Sie bitte scrollViewDidScroll wie unten aktualisieren und versuchen:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 

    dispatch_async(dispatch_get_main_queue(), ^(void){ 
    CGPoint offset = scrollView.contentOffset; 
    NSLog(@"[XXX] offset y is %f", offset.y); 
    }); 
} 
Verwandte Themen