420 Stimmen

UITableView - nach oben blättern

In meiner Tabellenansicht muss ich nach oben scrollen. Aber ich kann nicht garantieren, dass das erste Objekt Abschnitt 0, Zeile 0 sein wird. Es kann sein, dass meine Tabellenansicht mit Abschnitt Nummer 5 beginnt.

Ich erhalte also eine Ausnahme, wenn ich anrufe:

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

Gibt es eine andere Möglichkeit, in der Tabellenansicht nach oben zu blättern?

906voto

catlan Punkte 24696

UITableView ist eine Unterklasse von UIScrollView, so dass Sie auch verwenden können:

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

Oder

[mainTableView setContentOffset:CGPointZero animated:YES];

Und in Swift:

mainTableView.setContentOffset(CGPointZero, animated:true)

Und in Swift 3 und höher:

mainTableView.setContentOffset(.zero, animated: true)

250voto

fabb Punkte 11426

Note : Diese Antwort ist nicht gültig für iOS 11 und später.

Ich bevorzuge

[mainTableView setContentOffset:CGPointZero animated:YES];

Wenn Sie in Ihrer Tabellenansicht einen oberen Einschub haben, müssen Sie diesen abziehen:

[mainTableView setContentOffset:CGPointMake(0.0f, -mainTableView.contentInset.top) animated:YES];

90voto

Alvin George Punkte 13610

Mögliche Aktionen:

1

func scrollToFirstRow() {
    let indexPath = NSIndexPath(forRow: 0, inSection: 0)
    self.tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Top, animated: true)
}

2

func scrollToLastRow() {
    let indexPath = NSIndexPath(forRow: objects.count - 1, inSection: 0)
    self.tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Bottom, animated: true)
}

3

func scrollToSelectedRow() {
    let selectedRows = self.tableView.indexPathsForSelectedRows
    if let selectedRow = selectedRows?[0] as? NSIndexPath {
        self.tableView.scrollToRowAtIndexPath(selectedRow, atScrollPosition: .Middle, animated: true)
    }
}

4

func scrollToHeader() {
    self.tableView.scrollRectToVisible(CGRect(x: 0, y: 0, width: 1, height: 1), animated: true)
}

5

func scrollToTop(){
    self.tableView.setContentOffset(CGPointMake(0,  UIApplication.sharedApplication().statusBarFrame.height ), animated: true)
}

Deaktivieren Sie Scroll To Top:

func disableScrollsToTopPropertyOnAllSubviewsOf(view: UIView) {
    for subview in view.subviews {
        if let scrollView = subview as? UIScrollView {
            (scrollView as UIScrollView).scrollsToTop = false
        }
        self.disableScrollsToTopPropertyOnAllSubviewsOf(subview as UIView)
    }
}

Ändern und verwenden Sie es je nach Bedarf.

Mauersegler 4

  func scrollToFirstRow() {
    let indexPath = IndexPath(row: 0, section: 0)
    self.tableView.scrollToRow(at: indexPath, at: .top, animated: true)
  }

27voto

Kof Punkte 22423

Es ist besser, nicht NSIndexPath (leere Tabelle) zu verwenden, noch davon ausgehen, dass der oberste Punkt CGPointZero (Inhalt Einsätze) ist, das ist, was ich verwenden -

[tableView setContentOffset:CGPointMake(0.0f, -tableView.contentInset.top) animated:YES];

Ich hoffe, das hilft.

23voto

Alessandro Ornano Punkte 33106

Mauersegler 4 :

Das funktioniert sehr gut:

//self.tableView.reloadData() if you want to use this line remember to put it before 
let indexPath = IndexPath(row: 0, section: 0)
self.tableView.scrollToRow(at: indexPath, at: .top, animated: true)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X