ナビゲーション コントローラー内にテーブル ビュー コントローラーがあり、viewDidLoad でいくつかのビューをテーブル ビュー ヘッダーに追加します。
//Build up master container view with search bar and another view that has buttons
...
//Set this as the table header
self.tableView.tableHeaderView = masterHeaderContainerView;
この時点で他に何もしない場合、上から下へのビューは次のようになります
ナビゲーション バー、検索バー、ボタン付きアクション バー、テーブル ビュー セル... https://www.dropbox.com/s/mwhipz5qpa9duzw/filterAndActions.PNG
ただ、検索バーをナビゲーションバーの下に隠したいので、viewWillAppearにテーブルビューのコンテンツオフセットを設定します
self.tableView.contentOffset = CGPointMake(0, self.searchBar.frame.size.height);
iOS 6 では問題なく動作しましたが、iOS 7 では下にスクロールして検索バーを表示すると消えてしまい、本来あるべき場所に空白ができてしまいます。
問題の手がかりになるのは、コンテンツ オフセットを 22 (検索バーの高さの半分) にハード コードしてから下にスクロールすると、検索バーが背景のように見えるものによって半分隠れてしまうことです。
https://www.dropbox.com/s/jm1vro769jfhpy8/halfFilterBar.PNG
したがって、コンテンツ オフセットを設定する量は、検索バーが覆われる量です。ここで何が起こっているのでしょうか?
目標は、メール アプリのようなフィルター バーを作成することです。これは、ビューが最初に表示されたときはナビゲーション バーの下に隠れていますが、下にスクロールすると表示されます。
ビューにはxibs /ストーリーボードがないため、検索バーと検索ディスプレイコントローラーをプログラムで構築しています。これは標準のUITableViewControllerサブクラスです。
UISearchBar *aSearchBar = [[UISearchBar alloc] initWithFrame:CGRectZero];
UISearchDisplayController *aSearchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:aSearchBar contentsController:self];
aSearchBar.frame = ...