Как заставить UITableview перейти на верх страницы при перезагрузке? - PullRequest
30 голосов
/ 04 апреля 2011

Я пытаюсь заставить UITableview перейти в начало страницы, когда я перезагружаю данные таблицы, когда я вызываю следующее из

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

// A bunch of code …

[TableView reloadData];
}

В том же духе я также хотел бы иметь возможность перейти к определенному разделу при перезагрузке данных таблицы.

Я попытался разместить следующее, что, кажется, применимо только к строке, до и после перезагрузки, но ничего не происходит:

[TableView scrollToRowAtIndexPath:0 atScrollPosition:UITableViewScrollPositionTop  animated:YES];

Ответы [ 12 ]

0 голосов
/ 18 февраля 2019

Я был немного смущен некоторыми ответами, которые я нашел на этот вопрос из-за неполных объяснений.Из того, что я собрал, есть два пути для выполнения того, что запрашивал OP, и они следующие:

1) Если анимация не требуется, я бы предложил сбросить положение прокрутки перед загрузкой данных, используя один изметоды смещения.Причина, по которой вы должны запустить смещение перед reloadData, заключается в том, что reloadData работает асинхронно.Если вы запустите смещение после перезагрузки, ваша позиция прокрутки, вероятно, будет на несколько строк ниже от верхней части.

tableView.setContentOffset(.zero, animated: false)
tableView.reloadData()

2) Если требуется анимация, поместите прокрутку в верхнюю строку после запуска reloadData, используяscrollToRow.Причина, по которой метод scrollToRow работает, заключается в том, что он помещает вас в верхнюю часть таблицы, в отличие от метода смещения, который позиционирует вас относительно уже загруженных данных.

tableView.reloadData()
tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: true)
0 голосов
/ 23 марта 2016

Если вы прокручиваете перед перезагрузкой и количество строк уменьшается, вы можете иметь странное поведение при анимации.Чтобы обеспечить прокрутку после перезагрузки, используйте метод, подобный этому:

- (void)reloadTableViewAndScrollToTop:(BOOL)scrollToTop {
    [self.tableView reloadData];
    if (scrollToTop) {
        [self.tableView setContentOffset:CGPointZero animated:YES];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...