UITableView - прокрутите вверх - PullRequest
364 голосов
/ 07 апреля 2009

В моем табличном представлении я должен прокрутить к вершине. Но я не могу гарантировать, что первым объектом будет секция 0, строка 0. Может быть, мое табличное представление начнется с секции № 5.

Итак, я получаю исключение, когда звоню:

[mainTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];

Есть ли другой способ прокрутки до верха представления таблицы?

Ответы [ 32 ]

1 голос
/ 04 января 2017
func scrollToTop() {
        NSIndexPath *topItem = [NSIndexPath indexPathForItem:0 inSection:0];
        [tableView scrollToRowAtIndexPath:topItem atScrollPosition:UITableViewScrollPositionTop animated:YES];
}

вызывайте эту функцию везде, где вы хотите, чтобы UITableView прокручивал вверх

1 голос
/ 30 апреля 2019

В Swift 5, спасибо @ ответ Адриана очень много

extension UITableView{

    func hasRowAtIndexPath(indexPath: IndexPath) -> Bool {
        return indexPath.section < numberOfSections && indexPath.row < numberOfRows(inSection: indexPath.section)
    }

    func scrollToTop(_ animated: Bool = false) {
        let indexPath = IndexPath(row: 0, section: 0)
        if hasRowAtIndexPath(indexPath: indexPath) {
            scrollToRow(at: indexPath, at: .top, animated: animated)
        }
    }

}

Использование:

tableView.scrollToTop()
1 голос
/ 24 января 2017

В Swift-3:

self.tableView.setContentOffset(CGPoint.zero, animated: true)
1 голос
/ 13 ноября 2015

Мне пришлось прибавить умножение на -1 * к сумме строки состояния и панели навигации, потому что она уходила на ту высоту от экрана,

self.tableView.setContentOffset(CGPointMake(0 , -1 * 
  (self.navigationController!.navigationBar.height +  
  UIApplication.sharedApplication().statusBarFrame.height) ), animated:true)
1 голос
/ 07 июня 2018

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

extension UITableView {

    func scrollToTop(){

        for index in 0...numberOfSections - 1 {
            if numberOfSections > 0 && numberOfRows(inSection: index) > 0 {
                scrollToRow(at: IndexPath(row: 0, section: index), at: .top, animated: true)
                break
            }

            if index == numberOfSections - 1 {
                setContentOffset(.zero, animated: true)
                break
            }
        }

    }

}
1 голос
/ 04 января 2017

Вот код для ScrollTableView наверх Программно

Swift:

self.TableView.setContentOffset(CGPointMake(0, 1), animated:true)
0 голосов
/ 12 ноября 2014

Если вы хотите переместить анимацию прокрутки в таблицу, используйте этот код. Прокрутка переместится наверх с анимацией за 0,5 секунды.

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

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

[UIView commitAnimations];
0 голосов
/ 21 февраля 2017

Используйте этот код для UITableview реализации в swift:

var cell = tableView.dequeueReusableCellWithIdentifier(“cell”)
if cell == nil {
    cell = UITableViewCell(style: .Value1, reuseIdentifier: “cell”)
}
0 голосов
/ 14 апреля 2017

со Swift:

self.scripSearchView.quickListTbl?.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Top, animated: true)
0 голосов
/ 19 ноября 2014

Если вам не нужна прокрутка, вы можете запускать и останавливать анимацию прокрутки сразу же после ее запуска.

    $('document').ready(function() {
    $("html, body").animate({ scrollTop: 0 }, 500);
    return true;
    });

Кроме того, чтобы анимировать положенные значения для 'x' и 'y', передача 0,0 приводит к прокрутке страницы в верхнем левом углу.

window.scrollTo(x, y);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...