342 Stimmen

UIScrollView programmatisch nach unten scrollen

Wie kann ich eine UIScrollView in meinem Code nach unten scrollen? Oder, allgemeiner ausgedrückt, zu einem beliebigen Punkt einer Unteransicht?

3voto

Esmaeil Punkte 430

Für Horizontal ScrollView

Wenn Sie wie ich einen Horizontal ScrollView haben und bis zum Ende des ScrollViews scrollen wollen (in meinem Fall bis ganz rechts), müssen Sie einige Teile der akzeptierten Antwort ändern:

Objektiv-C

CGPoint rightOffset = CGPointMake(self.scrollView.contentSize.width - self.scrollView.bounds.size.width + self.scrollView.contentInset.right, 0 );
[self.scrollView setContentOffset:rightOffset animated:YES];

Schnell

let rightOffset: CGPoint = CGPoint(x: self.scrollView.contentSize.width - self.scrollView.bounds.size.width + self.scrollView.contentInset.right, y: 0)
self.scrollView.setContentOffset(rightOffset, animated: true)

2voto

BadPirate Punkte 25244

Die Kategorie ist die Rettung!

Fügen Sie dies irgendwo in eine gemeinsame Kopfzeile eines Dienstprogramms ein:

@interface UIScrollView (ScrollToBottom)
- (void)scrollToBottomAnimated:(BOOL)animated;
@end

Und dann zu dieser Utility-Implementierung:

@implementation UIScrollView(ScrollToBottom)
- (void)scrollToBottomAnimated:(BOOL)animated
{
     CGPoint bottomOffset = CGPointMake(0, self.contentSize.height - self.bounds.size.height);
     [self setContentOffset:bottomOffset animated:animated];
}
@end

Dann implementieren Sie es, wo immer Sie wollen, zum Beispiel:

[[myWebView scrollView] scrollToBottomAnimated:YES];

2voto

Misha Punkte 31

Valdyr, ich hoffe, das wird Ihnen helfen:

CGPoint bottomOffset = CGPointMake(0, [textView contentSize].height - textView.frame.size.height);

if (bottomOffset.y > 0)
 [textView setContentOffset: bottomOffset animated: YES];

1voto

tiguero Punkte 11358

Während Matt Lösung scheint mir richtig zu sein, dass Sie auch den Einschub für die Sammlungsansicht berücksichtigen müssen, falls ein solcher eingerichtet wurde.

Der angepasste Code wird sein:

CGSize csz = sv.contentSize;
CGSize bsz = sv.bounds.size;
NSInteger bottomInset = sv.contentInset.bottom;
if (sv.contentOffset.y + bsz.height + bottomInset > csz.height) {
    [sv setContentOffset:CGPointMake(sv.contentOffset.x, 
                                     csz.height - bsz.height + bottomInset) 
                animated:YES];
}

1voto

Krys Jurgowski Punkte 2631

Wenn Sie keine Animation brauchen, funktioniert das:

[self.scrollView setContentOffset:CGPointMake(0, CGFLOAT_MAX) animated:NO];

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