テーブルの上部に大きなビューが必要です。これは、検索バーのような検索パラメーターを提供しますが、より多くのオプションを備えているため、より多くのスペースを必要とします. (100 ピクセルとしましょう。)
スクロールしても消えるのではなく、シンプルにしたいのです。(44 ピクセルとしましょう。) 編集可能なフィールドの代わりに、検索の概要になります。その概要をタップすると、スクロールして一番上に戻り、検索ビューが再びフル サイズに拡大されます。
どうすればいいですか?
テーブルの上部に大きなビューが必要です。これは、検索バーのような検索パラメーターを提供しますが、より多くのオプションを備えているため、より多くのスペースを必要とします. (100 ピクセルとしましょう。)
スクロールしても消えるのではなく、シンプルにしたいのです。(44 ピクセルとしましょう。) 編集可能なフィールドの代わりに、検索の概要になります。その概要をタップすると、スクロールして一番上に戻り、検索ビューが再びフル サイズに拡大されます。
どうすればいいですか?
最初のステップは、ヘッダーを の一部にするのUITableView
ではなく、同じレベルに追加することです。
[self.view addSubview:self.tableView];
[self.view addSubview:self.myHeaderView];
tableView.tableHeaderView
テーブルを正常に動作させるには、必要なビューと同じサイズのテーブル ( ) に空のヘッダーを配置するだけです。
UIView *emptyHeader = [[UIView alloc] initWithFrame:self.myHeaderView.bounds];
self.tableView.tableHeaderView = emptyHeader;
また、カスタム ヘッダーの動作は動的であるため、UIView
サブクラスを作成してヘッダーを管理する必要があります。
をUITableViewDelegate
実装しscrollViewDidScroll
、呼び出されるたびに contentOffset を確認してください。
展開されたビューの高さが 100 で、縮小されたときは 44 だとします。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView.contentOffset.y > (100 - 44)) {
// Contract your header
myHeaderView.frame = CGRectMake(0, 0, self.view.frame.size.width, 44);
[myHeaderView contract]; // Make it display whatever data you want and setup the touch gesture
}
else {
int offset = scrollView.contentOffset.y;
// The reason for the -offset is that you need it to align to the table's real header position, which will be a little off screen
myHeaderView.frame = CGRectMake(0, -offset, self.view.frame.size.width, 100);
[myHeaderView expand];
}
}
お役に立てれば :)