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?

1voto

Ponja Punkte 664

In Windeseile:

   if self.mainScroll.contentSize.height > self.mainScroll.bounds.size.height {
        let bottomOffset = CGPointMake(0, self.mainScroll.contentSize.height - self.mainScroll.bounds.size.height);
        self.mainScroll.setContentOffset(bottomOffset, animated: true)
    }

1voto

MarionFlex Punkte 92

Lösung zum Blättern zum letzten Element einer Tabelle Ansicht :

Mauersegler 3 :

if self.items.count > 0 {
        self.tableView.scrollToRow(at:  IndexPath.init(row: self.items.count - 1, section: 0), at: UITableViewScrollPosition.bottom, animated: true)
}

0voto

jeune-loup Punkte 1

Erweitern Sie UIScrollView um eine scrollToBottom-Methode:

extension UIScrollView {
    func scrollToBottom(animated:Bool) {
        let offset = self.contentSize.height - self.visibleSize.height
        if offset > self.contentOffset.y {
            self.setContentOffset(CGPoint(x: 0, y: offset), animated: animated)
        }
    }
}

0voto

Habib Punkte 179

Um zum unteren Ende zu scrollen, müssen wir mit der maximalen Höhe der Zielansicht arbeiten.

import UIKit

extension UIScrollView {

    func scrollToBottomOf(targetView: UIView, animated: Bool) {
        setContentOffset(CGPoint(x:targetView.frame.minX, y:targetView.frame.maxY), animated: animated)
    }
}

//func invocation example 
optionScrollView.scrollToBottomOf(targetView: self.optionsStackView, animated: false)

0voto

mikeho Punkte 6400

Ich habe festgestellt, dass contentSize spiegelt nicht wirklich die tatsächliche Größe des Textes wider, so dass der Text beim Scrollen zum unteren Rand ein wenig daneben liegt. Der beste Weg, die tatsächliche Größe des Inhalts zu bestimmen, ist die Verwendung der NSLayoutManager 's usedRectForTextContainer: Methode:

UITextView *textView;
CGSize textSize = [textView.layoutManager usedRectForTextContainer:textView.textContainer].size;

Um zu bestimmen, wie viel Text tatsächlich in der UITextView können Sie berechnen, indem Sie die Einsätze des Textcontainers von der Rahmenhöhe abziehen.

UITextView *textView;
UIEdgeInsets textInsets = textView.textContainerInset;
CGFloat textViewHeight = textView.frame.size.height - textInsets.top - textInsets.bottom;

Dann wird das Blättern leicht:

// if you want scroll animation, use contentOffset
UITextView *textView;
textView.contentOffset = CGPointMake(textView.contentOffset.x, textSize - textViewHeight);

// if you don't want scroll animation
CGRect scrollBounds = textView.bounds;
scrollBounds.origin = CGPointMake(textView.contentOffset.x, textSize - textViewHeight);
textView.bounds = scrollBounds;

Einige Zahlen zur Veranschaulichung, was die verschiedenen Größen für eine leere Flasche bedeuten UITextView .

textView.frame.size = (width=246, height=50)
textSize = (width=10, height=16.701999999999998)
textView.contentSize = (width=246, height=33)
textView.textContainerInset = (top=8, left=0, bottom=8, right=0)

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