Подтвердить что ты не робот

Как получить UITableview, чтобы перейти в начало страницы при перезагрузке?

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

следующее:
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

// A bunch of code …

[TableView reloadData];
}

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

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

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

Ответ 1

Здесь вы можете сделать другой способ:

Objective-C

[tableView setContentOffset:CGPointZero animated:YES];

Swift 3

tableView.setContentOffset(.zero, animated: true)

Возможно, самый простой и самый прямой способ сделать это.

Ответ 2

Чтобы перейти к определенному разделу, вам необходимо указать путь к нему:

NSIndexPath *topPath = [NSIndexPath indexPathForRow:0 inSection:0];
[TableView scrollToRowAtIndexPath:topPath
                 atScrollPosition:UITableViewScrollPositionTop
                         animated:YES];

Если вы не уверены в количестве строк в таблицеView. Используйте следующее:

NSIndexPath *topPath = [NSIndexPath indexPathForRow:NSNotFound inSection:0];
[TableView scrollToRowAtIndexPath:topPath
                 atScrollPosition:UITableViewScrollPositionTop
                         animated:YES];

Ответ 3

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

func reloadAndScrollToTop() {
    tableView.reloadData()
    tableView.layoutIfNeeded()
    tableView.contentOffset = CGPoint(x: 0, y: -tableView.contentInset.top)
}

Ответ 4

UITableView является подклассом UIScrollView, поэтому вы также можете использовать:

[mainTableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];

Ответ 5

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

- (void)reloadTableViewAndScrollToTop:(BOOL)scrollToTop {
    [self.tableView reloadData];
    if (scrollToTop) {
        [self.tableView setContentOffset:CGPointZero animated:YES];
    }
}

Ответ 6

В быстрой версии 3.1

DispatchQueue.main.async(execute: {

        self.TableView.reloadData()
        self.TableView.contentOffset = .zero

    })

Ответ 7

Это работает для меня.

tableView.scrollToRow(at: IndexPath.init(row: 0, section: 0), at: .top, animated: true)