UISearchController を使用して、UITableView のコンテンツを検索/フィルタリングできるようにしたい状況があります。私が望む動作は、検索バーがテーブルビューの上部に固定されたまま、コンテンツが下にスクロールする連絡先アプリで Apple が行うことと同じです。検索バーがタップされると、Apple の連絡先と同じように、バーのアニメーションのデフォルトの動作がナビゲーション バーを覆い、結果が下に表示されるようにします。
物事を分離するためにサンプル アプリを作成し、それを次の検索コントローラーの初期化コードと組み合わせました。この VC は、半透明のナビゲーション バーを持つ UINavigationController のルート ビュー コントローラーです。
self.navigationItem.title = @"Title";
self.edgesForExtendedLayout = UIRectEdgeNone;
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchBar.frame = CGRectMake(0.0f, 0.0f, 320.0f, 44.0f);
self.searchController.hidesNavigationBarDuringPresentation = YES;
self.searchController.dimsBackgroundDuringPresentation = NO;
[self.view addSubview:self.searchController.searchBar];
self.definesPresentationContext = YES;
これにより、2 つの問題が発生します。1) 検索バーの高さが 64 ピクセルに拡張されないため、ステータス バーの背後にあるものが表示されます。2) アイテムをナビゲーション スタックにプッシュしてから戻ると、親ビューのコンテンツ (テーブル ビュー) ジャンプします。
私は UISearchcontroller に関して多くの混乱を見てきました。そのため、誰かが良い解決策を持っていると楽観視しているわけではありませんが、とにかく試してみてください。