411

私のテーブル ビューでは、一番上までスクロールする必要があります。しかし、最初のオブジェクトがセクション 0、行 0 になることを保証することはできません。テーブル ビューがセクション番号 5 から始まる可能性があります。

したがって、次のように呼び出すと例外が発生します。

[mainTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];

テーブル ビューの上部にスクロールする別の方法はありますか?

4

36 に答える 36

895

UITableView は UIScrollView のサブクラスであるため、以下も使用できます。

[mainTableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];

または

[mainTableView setContentOffset:CGPointZero animated:YES];

そしてスウィフトでは:

mainTableView.setContentOffset(CGPointZero, animated:true)

そしてSwift 3以降では:

mainTableView.setContentOffset(.zero, animated: true)
于 2009-04-07T10:23:31.307 に答える
247

: この回答は、iOS 11 以降では無効です。

私は好む

[mainTableView setContentOffset:CGPointZero animated:YES];

テーブル ビューに上部インセットがある場合は、それを差し引く必要があります。

[mainTableView setContentOffset:CGPointMake(0.0f, -mainTableView.contentInset.top) animated:YES];
于 2012-01-17T15:24:49.243 に答える
12

を持つテーブルの場合contentInset、コンテンツ オフセットを に設定しても機能しCGPointZeroません。テーブルの上部にスクロールするのではなく、コンテンツの上部にスクロールします。

コンテンツ インセットを考慮すると、代わりに次のようになります。

[tableView setContentOffset:CGPointMake(0, -tableView.contentInset.top) animated:NO];
于 2015-06-17T10:33:27.240 に答える
8

迅速:

tableView.setContentOffset(CGPointZero, animated: true)
于 2014-12-07T15:04:58.127 に答える
7

すでに述べたことに加えて、拡張機能 (Swift) またはカテゴリ (Objective C) を作成して、将来これを簡単にすることができます。

迅速:

extension UITableView {
    func scrollToTop(animated: Bool) {
        setContentOffset(CGPointZero, animated: animated)
    }
}

特定の tableView を一番上までスクロールしたいときはいつでも、次のコードを呼び出すことができます。

tableView.scrollToTop(animated: true)
于 2015-09-07T17:21:39.280 に答える
6

インセットを考慮しているため、私は次のことを好みます。インセットがない場合でも、インセットが 0 になるため、一番上までスクロールします。

tableView.setContentOffset(CGPoint(x: 0, y: -tableView.contentInset.top), animated: true)
于 2017-05-04T19:01:36.720 に答える
5

スウィフト:

tableView ヘッダーがない場合:

tableView.setContentOffset(CGPointMake(0,  UIApplication.sharedApplication().statusBarFrame.height ), animated: true)

もしそうなら :

tableView.setContentOffset(CGPointMake(0, -tableViewheader.frame.height   + UIApplication.sharedApplication().statusBarFrame.height ), animated: true)
于 2015-02-04T08:23:18.280 に答える
3

contentOffset の使用は正しい方法ではありません。テーブルビューの自然な方法であるため、これはより良いでしょう

tableView.scrollToRow(at: NSIndexPath.init(row: 0, section: 0) as IndexPath, at: .top, animated: true)
于 2017-06-12T04:41:46.757 に答える
2
func scrollToTop() {
        NSIndexPath *topItem = [NSIndexPath indexPathForItem:0 inSection:0];
        [tableView scrollToRowAtIndexPath:topItem atScrollPosition:UITableViewScrollPositionTop animated:YES];
}

UITableViewを一番上にスクロールしたい場所ならどこでもこの関数を呼び出します

于 2017-01-04T06:24:37.923 に答える
1

-1 *ステータス バーとナビゲーション バーの合計に乗算を追加する必要がありました。

self.tableView.setContentOffset(CGPointMake(0 , -1 * 
  (self.navigationController!.navigationBar.height +  
  UIApplication.sharedApplication().statusBarFrame.height) ), animated:true)
于 2015-11-12T23:37:20.207 に答える
1

プログラムで ScrollTableView を一番上に表示するコードは次のとおりです。

迅速:

self.TableView.setContentOffset(CGPointMake(0, 1), animated:true)
于 2017-01-04T06:29:00.843 に答える
1

迅速に

あなたの行 = selectioncellRowNumber あなたが持っている場合はあなたのセクション = selectionNumber あなたが設定していない場合はゼロです

//UITableViewScrollPosition.Middle または Bottom または Top

var lastIndex = NSIndexPath(forRow:  selectioncellRowNumber, inSection: selectionNumber)
self.tableView.scrollToRowAtIndexPath(lastIndex, atScrollPosition: UITableViewScrollPosition.Middle, animated: true)
于 2015-08-31T10:37:24.527 に答える
0

テーブル内でスクロール アニメーションを動かしたい場合は、このコードを使用します。スクロールは 0.5 秒のアニメーションで一番上に移動します。

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

[_tableContent scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];

[UIView commitAnimations];
于 2014-11-12T03:58:29.420 に答える
-30

スクロールしたくない場合は、スクロール アニメーションを開始してすぐに停止することができます。

    $('document').ready(function() {
    $("html, body").animate({ scrollTop: 0 }, 500);
    return true;
    });

また、'x' と 'y' の put 値をアニメーション化するには、0,0 を渡すとページが即座に左上にスクロールされます。

window.scrollTo(x, y);
于 2014-11-19T09:09:53.050 に答える