LoginSignup
19
20

More than 5 years have passed since last update.

ステータスバーをタップした時に、一番上ではなく途中にスクロールさせたい時の書き方

Posted at

ステータスバーをタップしたら一番上にスクロールするアプリはよくありますし簡単に実装できます。しかしこれを「途中に」スクロールしたい場合が、ごくごく稀にあります。今日そんな場面に遭遇して調べたので、まとめておきます。

そもそもステータスバーをタップしたら、何がどう動くのか

UIScrollViewやUITableViewは、scrollsToTopというプロパティを持っています。このプロパティは、「scroll-to-top gestureが行われた時に一番上にスクロールするか」をBOOL型で設定します。scroll-to-top gestureはステータスバーをタップする事のようです。(UIScrollView Class ReferenceのscrollsToTopを参照)。
このプロパティがYES(デフォルト)の場合、delegateのメソッド- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollViewが呼ばれ、本当にスクロールするのかどうかをYES/NOで受け取り動作します。プロパティがNOの場合は、delegateメソッドは呼ばれません。
このdelegateメソッドがYESを返せば、システム側で上にスクロールしていきます。途中までスクロールさせたい場合は、「戻り値としてはNOを返して」「delegateの中でスクロール」すれば良いのです。

サンプルコード

以下のコードは、UITableViewで「ステータスバーをタップしたら、section=1にスクロールする」場合のdelegate部分の実装です。

#pragma mark - UIScrollViewDelegate
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView
{
    // section=1までスクロールする
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:1];
    [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];

    // システム的な自動スクロールは停止
    return NO;
}

UIガイドライン的にはどうか?

正直アプリを申請してみないとわかりません。
iOSヒューマンインタフェースガイドラインの中のステータスバーの箇所を見ても、scroll-to-top gestureやタップ時のアニメーションについての言及はありません。自分が見落としているだけかもしれません。
また、これまで触った事のあるアプリでも、「ステータスバーをタップしたら一番上ではなくて途中にスクロールする」パターンは見た事ありません。
なのでせっかく実装しても審査で落とされてアバーとなるかもしれません。

19
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
20