1

ナビゲーション コントローラー内にテーブル ビュー コントローラーがあり、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 = ...
4

2 に答える 2

2

iOS 7 で期待される動作が得られるように設定する必要があります

self.edgesForExtendedLayout = UIRectEdgeNone;
于 2014-03-31T23:51:29.023 に答える