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?

0voto

8suhas Punkte 1460
CGFloat yOffset = scrollView.contentOffset.y;

CGFloat height = scrollView.frame.size.height;

CGFloat contentHeight = scrollView.contentSize.height;

CGFloat distance = (contentHeight  - height) - yOffset;

if(distance < 0)
{
    return ;
}

CGPoint offset = scrollView.contentOffset;

offset.y += distance;

[scrollView setContentOffset:offset animated:YES];

0voto

jjrscott Punkte 1303

Eine gute Möglichkeit, um sicherzustellen, dass der untere Teil Ihres Inhalts sichtbar ist, ist die Formel:

contentOffsetY = MIN(0, contentHeight - boundsHeight)

Dadurch wird sichergestellt, dass sich der untere Rand Ihres Inhalts immer am oder über dem unteren Rand der Ansicht befindet. Die MIN(0, ...) ist erforderlich, weil UITableView (und wahrscheinlich UIScrollView ) gewährleistet contentOffsetY >= 0 wenn der Benutzer versucht, durch sichtbares Einrasten zu blättern contentOffsetY = 0 . Das sieht für den Benutzer ziemlich seltsam aus.

Der Code zur Implementierung lautet:

UIScrollView scrollView = ...;
CGSize contentSize = scrollView.contentSize;
CGSize boundsSize = scrollView.bounds.size;
if (contentSize.height > boundsSize.height)
{
    CGPoint contentOffset = scrollView.contentOffset;
    contentOffset.y = contentSize.height - boundsSize.height;
    [scrollView setContentOffset:contentOffset animated:YES];
}

0voto

valdyr Punkte 188

Bei mir hat es nicht funktioniert, als ich versucht habe, es in UITableViewController en self.tableView (iOS 4.1) nach Hinzufügen von footerView . Es scrollt aus den Rändern heraus und zeigt einen schwarzen Bildschirm.

Alternative Lösung:

 CGFloat height = self.tableView.contentSize.height; 

 [self.tableView setTableFooterView: myFooterView];
 [self.tableView reloadData];

 CGFloat delta = self.tableView.contentSize.height - height;
 CGPoint offset = [self.tableView contentOffset];
 offset.y += delta;

 [self.tableView setContentOffset: offset animated: YES];

-1voto

Abdur Punkte 1

Xamarin.iOS Version für UICollectionView der akzeptierten Antwort zur Erleichterung des Kopierens und Einfügens

var bottomOffset = new CGPoint (0, CollectionView.ContentSize.Height - CollectionView.Frame.Size.Height + CollectionView.ContentInset.Bottom);          
CollectionView.SetContentOffset (bottomOffset, false);

-2voto

Abdur Punkte 1

Xamarin.iOS Version der akzeptierten Antwort

var bottomOffset = new CGPoint (0,
     scrollView.ContentSize.Height - scrollView.Frame.Size.Height
     + scrollView.ContentInset.Bottom);

scrollView.SetContentOffset (bottomOffset, false);

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