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の動作に対して明確な方法があり、私はそれを見つけることができませんか?
多分あなたはそれをこのように試すことができます...
[self.tableView setContentOffset:CGPointMake(0,40)];
私のためにも働いた。私は以下を使用しました:
[self.tableView setContentOffset:CGPointMake(0, self.searchDisplayController.searchBar.frame.size.height) animated:NO];
検索バーの高さを照会します。
これにより、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)];
}
これは私のために働きます。
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.bounces = YES;
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.tableView setContentOffset:CGPointMake(0, 44)];
}
最初に上にスクロールし、次にsetContentOffset
から0
にスクロールする必要がありました。そうすると、searchBarが表示されます。
self.tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0), atScrollPosition: UITableViewScrollPosition.Top, animated: false)
self.tableView.setContentOffset(CGPointMake(0, 0), animated: false)