2016-12-25 11 views
0

Привет всем (и Merry Xmas)scrollViewDidScroll называется «дважды» после того, как столовый набор смещения

надеюсь, кто-то может ответить на мой вопрос, и это будет большой рождественский подарок .

Мой UIViewController один стол с сегментным управлением в области раздела стола. Похоже, что этот enter image description here

каждый раз, когда пользователь нажимает сегментарный контроль, я перезагружать данные таблицы и, надеюсь, таблица покажет правильное положение (не точно позицию строки, поэтому я использую содержимое таблицы смещения). Вот мой код:

- (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); 
} 

Проблема у меня есть, после того, как таблица перезагрузки данных, кажется, что я не должен вызывать self.tableView.contentOffset немедленно. Мой стол не прокручивался до позиции, когда я устанавливал. И я обнаружил, что scrollViewDidScroll вызывается дважды !!! сообщение Лог выглядит следующим образом:

enter image description here

Так кто-нибудь знает, что правильный путь, чтобы перезагрузить данные таблицы и прокручивать таблицу в определенной позиции ?? Заранее спасибо.

Обновление: выясняется, что мой код верен. причина в моем представленииDidLoad, i set

self.tableView.estimatedRowHeight = 230.0; 

И по какой-то причине этот параметр вызывает проблему. после того, как я прокомментирую эту строку .. поведение правильное. Первоначально я установил оценку моего стола. RowHeight - это потому, что высота моей ячейки динамична. Теперь эта проблема решена. Спасибо за ребята здесь за ваши советы. Счастливого Рождества !!!

+0

Попробуйте использовать scrollToRowAtIndexpath в Tableview. – Arasuvel

+0

Не могли бы вы поделиться своим ожидаемым снимком экрана? –

+0

Привет @Arasuvel, я исправляю проблему. код правильный .. ошибка из другой строки. Я обновляюсь в сообщении. –

ответ

2

Не могли бы вы обновить scrollViewDidScroll, как показано ниже и попробуйте:

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

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