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?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];
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];
}
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];
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);
- See previous answers
- Weitere Antworten anzeigen