web-dev-qa-db-ja.com

ヘッダーが表示されないようにUITableViewをスクロールします

TableViews.tableHeaderViewとしてUISearchBarを備えたUITableViewがあります。 3.0の新しいMail.app、Notes.appなどと同じように。ユーザーがSearchBarを自分の視界にドラッグするまで、SearchBarを非表示にします。

私の試みは、tableViewにいくつかの項目がある場合にのみ機能するため、tableViewは実際にスクロールしたいと考えています。私はこれをloadViewで呼び出します:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self._tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];

それにもかかわらず、Appleはそのような検索バーを異なる方法で処理するようです。検索バーをドラッグした後は、テーブルセルにバインドされていないようです(Notes.appでは、Mail.appではありません)。

しかし、おそらくAppleには、その新しい3.0の動作に対して明確な方法があり、私はそれを見つけることができませんか?

25
Jens Kohl

多分あなたはそれをこのように試すことができます...

[self.tableView setContentOffset:CGPointMake(0,40)];
33
Joe

私のためにも働いた。私は以下を使用しました:

[self.tableView setContentOffset:CGPointMake(0, self.searchDisplayController.searchBar.frame.size.height) animated:NO];

検索バーの高さを照会します。

25
petert

これにより、iPod.appとまったく同じ動作が得られます。

- (void)viewWillAppear:(BOOL)animated
{
 [super viewWillAppear:animated];

 CGFloat searchBarHeight = CGRectGetHeight([[[self searchDisplayController] searchBar] frame]);
 if ([[self tableView] contentOffset].y < searchBarHeight)
  [[self tableView] setContentOffset:CGPointMake(0, searchBarHeight)];
}
10
ev0

これは私のために働きます。

- (void)viewDidLoad {
    [super viewDidLoad];

    self.tableView.bounces = YES;
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    [self.tableView setContentOffset:CGPointMake(0, 44)];
}
3
neoneye

最初に上にスクロールし、次にsetContentOffsetから0にスクロールする必要がありました。そうすると、searchBarが表示されます。

self.tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0), atScrollPosition: UITableViewScrollPosition.Top, animated: false)
self.tableView.setContentOffset(CGPointMake(0, 0), animated: false)
0
AaoIi