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?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)
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)