Wie kann ich eine UIScrollView
in meinem Code nach unten scrollen? Oder, allgemeiner ausgedrückt, zu einem beliebigen Punkt einer Unteransicht?
Antworten
Zu viele Anzeigen?Die Einstellung des Inhalts-Offsets auf die Höhe der Inhaltsgröße ist falsch: es scrollt den unteren Rand des Inhalts auf die top der Bildlaufansicht und damit außer Sichtweite.
Die richtige Lösung besteht darin, den unteren Teil des Inhalts bis zum unten der Bildlaufansicht, etwa so ( sv
ist die UIScrollView):
CGSize csz = sv.contentSize;
CGSize bsz = sv.bounds.size;
if (sv.contentOffset.y + bsz.height > csz.height) {
[sv setContentOffset:CGPointMake(sv.contentOffset.x,
csz.height - bsz.height)
animated:YES];
}
Eine Swift 2.2-Lösung, die contentInset
zu berücksichtigen
let bottomOffset = CGPoint(x: 0, y: scrollView.contentSize.height - scrollView.bounds.size.height + scrollView.contentInset.bottom)
scrollView.setContentOffset(bottomOffset, animated: true)
Dies sollte in einer Erweiterung erfolgen
extension UIScrollView {
func scrollToBottom() {
let bottomOffset = CGPoint(x: 0, y: contentSize.height - bounds.size.height + contentInset.bottom)
setContentOffset(bottomOffset, animated: true)
}
}
Beachten Sie, dass Sie prüfen sollten, ob bottomOffset.y > 0
vor dem Scrollen
Nach oben scrollen
- CGPoint topOffset = CGPointMake(0, 0);
- [scrollView setContentOffset:topOffset animated:YES];
Nach unten blättern
- CGPoint bottomOffset = CGPointMake(0, scrollView.contentSize.height - self.scrollView.bounds.size.height);
- [scrollView setContentOffset:bottomOffset animated:YES];
Es sieht so aus, als hätten alle Antworten hier den sicheren Bereich nicht berücksichtigt. Seit iOS 11 wurde für das iPhone X ein sicherer Bereich eingeführt. Dies kann die scrollView's beeinflussen contentInset
.
Für iOS 11 und höher, um richtig nach unten zu scrollen und den Inhalt einzuschließen. Sie sollten verwenden adjustedContentInset
anstelle von contentInset
. Prüfen Sie diesen Code:
-
Schnell:
let bottomOffset = CGPoint(x: 0, y: scrollView.contentSize.height - scrollView.bounds.height + scrollView.adjustedContentInset.bottom) scrollView.setContentOffset(bottomOffset, animated: true)
-
Objektiv-C
CGPoint bottomOffset = CGPointMake(0, self.scrollView.contentSize.height - self.scrollView.bounds.size.height + self.scrollView.adjustedContentInset.bottom); [self.scrollView setContentOffset:bottomOffset animated:YES];
-
Swift-Erweiterung (dadurch bleibt die ursprüngliche
contentOffset.x
):extension UIScrollView { func scrollsToBottom(animated: Bool) { let bottomOffset = CGPoint(x: contentOffset.x, y: contentSize.height - bounds.height + adjustedContentInset.bottom) setContentOffset(bottomOffset, animated: animated) } }
Referenzen: