In meiner Tabellenansicht muss ich nach oben scrollen. Ich kann jedoch nicht garantieren, dass das erste Objekt Abschnitt 0, Zeile 0 ist. Möglicherweise beginnt meine Tabellenansicht mit Abschnitt 5.
Ich bekomme also eine Ausnahme, wenn ich anrufe:
[mainTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
Gibt es eine andere Möglichkeit, zum Anfang der Tabellenansicht zu scrollen?
ios
uitableview
Ilya Suzdalnitski
quelle
quelle
self.tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: UITableViewScrollPosition.top, animated: true)
scheint in iOS 11 zu funktionierenHinweis : Diese Antwort gilt nicht für iOS 11 und höher.
ich bevorzuge
Wenn Ihre Tabellenansicht einen oberen Einschub enthält, müssen Sie diesen subtrahieren:
quelle
tableView
nicht Null habencontentInset
. Zum Beispiel :tableView.contentInset = UIEdgeInsetsMake(5.0f, 0.0f, 250.0f, 0.0f);
. Wenn dies der Fall ist, wird in Ihrem Code eintableView
Bildlauf durchgeführt(0.0f, 5.0f)
.[tableView setContentOffset:CGPointMake(0.0f, -tableView.contentInset.top) animated:YES];
-scrollView.adjustedContentInset.top
stattdessen die Verwendung in Betracht ziehen .Mögliche Aktionen:
1
2
3
4
5
Bildlauf nach oben deaktivieren:
Ändern und verwenden Sie es gemäß den Anforderungen.
Swift 4
quelle
Es ist besser, weder NSIndexPath (leere Tabelle) zu verwenden, noch anzunehmen, dass der oberste Punkt CGPointZero (Inhaltseinfügungen) ist. Das verwende ich -
Hoffe das hilft.
quelle
Swift 4 :
Das funktioniert sehr gut:
quelle
UITableViewStyleGrouped
(Kopfzeilen scrollen mit dem Inhalt) und dieser Code funktioniert. Stellen Sie sicher, dass Sie sich im Hauptthread befinden und diesen Code starten, nachdem die Ansicht angezeigt wurde (viewDidAppear
). Wenn Sie immer noch Probleme haben, versuchen Sie, den Code in diesen zu setzen:DispatchQueue.main.asyncAfter(deadline: .now()+0.1, execute: { // the code }
Ich habe ein Problem beim Aufrufen einiger Methoden auf einer leeren Seite festgestellt
tableView
. Hier ist eine weitere Option für Swift 4, die leere Tabellenansichten verarbeitet.Verwendungszweck:
quelle
NICHT VERWENDEN
Manchmal kann der Offset falsch eingestellt werden. In meinem Fall befand sich die Zelle beispielsweise tatsächlich leicht über der Ansicht mit Einfügungen für sichere Bereiche. Nicht gut.
STATT VERWENDUNG
quelle
Verwenden Sie unter iOS 11, um
adjustedContentInset
in beiden Fällen, in denen die Statusleiste für Anrufe angezeigt wird oder nicht, korrekt nach oben zu scrollen.Schnell:
quelle
Bei Tabellen mit a funktioniert das
contentInset
Festlegen des Inhaltsversatzes aufCGPointZero
nicht. Es wird zum Inhaltsverzeichnis gescrollt und nicht zum Tischverzeichnis.Die Berücksichtigung des eingefügten Inhalts führt stattdessen dazu:
quelle
Mit diesem Code können Sie einen bestimmten Abschnitt nach oben scrollen
quelle
Schnell:
quelle
Swift 3
wenn
tableView.setContentOffset
nicht funktionieren.Verwenden:
quelle
Da meine
tableView
mit allen Arten von Einsätzen gefüllt ist, war dies das einzige, was gut funktionierte:Swift 3
Swift 2
quelle
Sie können eine Erweiterung (Swift) oder Kategorie (Ziel C) erstellen, um dies in Zukunft zu vereinfachen:
Schnell:
Wenn Sie eine bestimmte Tabellenansicht nach oben scrollen möchten, können Sie den folgenden Code aufrufen:
quelle
Ich bevorzuge das Folgende, da es einen Einschub berücksichtigt. Wenn kein Einschub vorhanden ist, wird immer noch nach oben gescrollt, da der Einschub 0 ist.
quelle
Swift:
Wenn Sie keinen tableView-Header haben:
wenn ja :
quelle
Swift 5, iOS 13
Ich weiß, dass diese Frage bereits viele Antworten hat, aber meiner Erfahrung nach gibt es nur eine Methode, die immer funktioniert:
tableView.scrollToRow(at: IndexPath(row: someArray.count - 1, section: 0), at: .bottom, animated: true)
Wenn Sie asynchron arbeiten, Tabellen mit Tastaturen animieren usw., werden die anderen Antworten häufig fast nach unten und nicht nach unten gescrollt. Diese Methode bringt Sie jedes Mal zum absoluten Ende einer Tabelle.
quelle
Folgendes verwende ich, um unter iOS 11 richtig zu arbeiten:
quelle
In Swift 5 vielen Dank @ Adrian Antwort
Verwendungszweck:
quelle
Die Verwendung von contentOffset ist nicht der richtige Weg. Dies wäre besser, da dies die natürliche Art der Tabellenansicht ist
quelle
Dies war das einzige Code-Snippet, das für mich funktioniert hat
Swift 4:
PS 70 ist die Höhe meiner Header- und Tabellenansichtszelle
quelle
Rufen Sie diese Funktion überall dort auf, wo UITableView nach oben scrollen soll
quelle
Swift 4 über Erweiterung, behandelt leere Tabellenansicht:
quelle
Ich verwende tabBarController und habe auf jeder Registerkarte ein paar Abschnitte in meiner Tabellenansicht, daher ist dies die beste Lösung für mich.
quelle
Ich musste das Multiplizieren mit
-1 *
zur Summe der Statusleiste und der Navigationsleiste addieren , weil es so hoch vom Bildschirm war.quelle
in schnell
Ihre Zeile = selectioncellRowNumber Ihr Abschnitt, wenn Sie = selectionNumber haben, wenn Sie nicht gesetzt haben, ist auf Null
//UITableViewScrollPosition.Middle oder Bottom oder Top
quelle
Hier ist der Code für ScrollTableView, um programmgesteuert nach oben zu gelangen
Schnell:
quelle
In Swift-3:
quelle
Wenn Sie eine Scroll-Animation in der Tabelle verschieben möchten, verwenden Sie diesen Code. Der Bildlauf wird in 0,5 Sekunden mit Animation nach oben verschoben.
quelle
Mit Swift:
quelle