Wie kann ich UIScrollView
in meinem Code nach unten scrollen? Oder allgemeiner zu einem Punkt einer Unteransicht?
298
Wie kann ich UIScrollView
in meinem Code nach unten scrollen? Oder allgemeiner zu einem Punkt einer Unteransicht?
Mit der setContentOffset:animated:
Funktion von UIScrollView können Sie zu einem beliebigen Teil der Inhaltsansicht blättern. Hier ist ein Code, der nach unten scrollen würde, vorausgesetzt, Ihre scrollView lautet self.scrollView
:
CGPoint bottomOffset = CGPointMake(0, self.scrollView.contentSize.height - self.scrollView.bounds.size.height + self.scrollView.contentInset.bottom);
[self.scrollView setContentOffset:bottomOffset animated:YES];
Ich hoffe, das hilft!
CGPoint bottomOffset = CGPointMake(0, self.scrollView.contentSize.height - self.scrollView.bounds.size.height + self.scrollView.contentInset.bottom);
contentSize
es niedriger als istbounds
. So sollte es sein:scrollView.setContentOffset(CGPointMake(0, max(scrollView.contentSize.height - scrollView.bounds.size.height, 0) ), animated: true)
let bottomOffsetY = max(collectionView.contentSize.height - collectionView.bounds.height + collectionView.contentInset.bottom, 0)
Schnelle Version der akzeptierten Antwort zum einfachen Einfügen von Kopien:
quelle
Einfachste Lösung:
quelle
Nur eine Erweiterung der bestehenden Antwort.
Es kümmert sich auch um den unteren Einschub (falls Sie diesen verwenden, um Ihre Bildlaufansicht anzupassen, wenn die Tastatur sichtbar ist)
quelle
Das Einstellen des Inhaltsversatzes auf die Höhe der Inhaltsgröße ist falsch: Es wird der untere Rand des Inhalts nach oben verschoben der Bildlaufansicht und ist somit nicht sichtbar.
Die richtige Lösung besteht darin, den unteren Rand des Inhalts wie folgt zum unteren Rand
sv
der Bildlaufansicht zu scrollen ( ist die UIScrollView):quelle
if (sv.contentOffset.y + csz.height > bsz.height) {
?setContentOffset:
Befehl, der wichtig ist.Eine schnelle Implementierung:
benutze es:
quelle
Eine Swift 2.2-Lösung unter
contentInset
BerücksichtigungDies sollte in einer Erweiterung sein
Beachten Sie, dass Sie
bottomOffset.y > 0
vor dem Scrollen überprüfen möchten, obquelle
Was ist, wenn
contentSize
niedriger als istbounds
?Für Swift ist es:
quelle
Scrolle nach oben
Scrollen Sie nach unten
quelle
Ich habe auch einen anderen nützlichen Weg gefunden, dies zu tun, wenn Sie eine UITableview verwenden (eine Unterklasse von UIScrollView):
quelle
Verwenden der UIScrollView-
setContentOffset:animated:
Funktion, um in Swift nach unten zu scrollen.quelle
Es sieht so aus, als hätten alle Antworten hier den sicheren Bereich nicht berücksichtigt. Seit iOS 11 wurde auf dem iPhone X ein sicherer Bereich eingeführt. Dies kann sich auf die scrollView auswirken
contentInset
.Scrollen Sie für iOS 11 und höher mit dem enthaltenen Inhaltseinsatz ordnungsgemäß nach unten. Sie sollten
adjustedContentInset
anstelle von verwendencontentInset
. Überprüfen Sie diesen Code:contentOffset.x
):Verweise:
quelle
Mit einem (optionalen)
footerView
undcontentInset
lautet die Lösung:quelle
Schnell:
Sie könnten eine Erweiterung wie diese verwenden:
Verwenden:
quelle
valdyr, hoffe das hilft dir:
quelle
Kategorie zur Rettung!
Fügen Sie dies irgendwo zu einem gemeinsam genutzten Dienstprogramm-Header hinzu:
Und dann zu dieser Dienstprogrammimplementierung:
Implementieren Sie es dann, wo immer Sie möchten, zum Beispiel:
quelle
Für horizontale ScrollView
Wenn Sie möchten, dass ich eine horizontale Bildlaufansicht habe und zum Ende scrollen möchte (in meinem Fall ganz rechts davon), müssen Sie einige Teile der akzeptierten Antwort ändern:
Ziel c
Schnell
quelle
Wenn Sie scrollView contentSize irgendwie ändern (z. B. etwas zu stackView hinzufügen, das sich in scrollView befindet), müssen Sie aufrufen
scrollView.layoutIfNeeded()
vor dem Scrollen , da dies sonst nichts bewirkt.Beispiel:
quelle
Eine gute Möglichkeit, um sicherzustellen, dass der untere Teil Ihres Inhalts sichtbar ist, ist die Verwendung der folgenden Formel:
Dadurch wird sichergestellt, dass sich der untere Rand Ihres Inhalts immer am oder über dem unteren Rand der Ansicht befindet. Dies
MIN(0, ...)
ist erforderlich, weilUITableView
(und wahrscheinlichUIScrollView
) sichergestellt wird,contentOffsetY >= 0
wenn der Benutzer versucht, durch sichtbares Einrasten einen Bildlauf durchzuführencontentOffsetY = 0
. Das sieht für den Benutzer ziemlich seltsam aus.Der Code, um dies zu implementieren, lautet:
quelle
Wenn Sie keine Animation benötigen, funktioniert dies:
quelle
Während
Matt
mir die Lösung richtig erscheint, müssen Sie auch die eingefügte Sammlungsansicht berücksichtigen, wenn eine eingerichtet wurde.Der angepasste Code lautet:
quelle
In Kürze:
quelle
Lösung zum Scrollen zum letzten Element einer Tabelle Ansicht:
Swift 3:
quelle
Haben Sie nicht für mich arbeiten, als ich versuchte , es zu benutzen , in
UITableViewController
aufself.tableView
(iOS 4.1)
, nach dem HinzufügenfooterView
. Es rollt aus den Rändern heraus und zeigt einen schwarzen Bildschirm.Alternative Lösung:
quelle
quelle
Ich habe festgestellt, dass
contentSize
dies nicht wirklich die tatsächliche Größe des Textes widerspiegelt. Wenn Sie also versuchen, nach unten zu scrollen, wird es ein wenig abweichen. Der beste Weg , die tatsächlichen Inhalt Größe zu bestimmen , ist tatsächlich die verwendenNSLayoutManager
‚s -usedRectForTextContainer:
Methode:Um festzustellen, wie viel Text tatsächlich in der angezeigt wird
UITextView
, können Sie ihn berechnen, indem Sie die Textcontainer-Einfügungen von der Rahmenhöhe abziehen.Dann wird es einfach zu scrollen:
Einige Zahlen als Referenz dafür, was die verschiedenen Größen für ein leeres darstellen
UITextView
.quelle
Erweitern Sie UIScrollView, um eine scrollToBottom-Methode hinzuzufügen:
quelle
Xamarin.iOS- Version der akzeptierten Antwort
quelle
Xamarin.iOS- Version für
UICollectionView
die akzeptierte Antwort zum einfachen Kopieren und Einfügenquelle