NavigationBarにUISearchBarを表示するにはどうすればよいですか?
これを行う方法がわかりません。
あなたの助けは大歓迎です。
SearchBarをナビゲーションバーの中央に配置するには:
self.navigationItem.titleView = self.searchBarTop;
SearchBarをナビゲーションバーの左側/右側に配置するには:
UIBarButtonItem *searchBarItem = [[UIBarButtonItem alloc] initWithCustomView:searchBar];
self.navigationItem.rightBarButtonItem = searchBarItem;
IOS 7以降、UISearchDisplayControllerはデフォルトでこれをサポートします。 UISearchDisplayControllerのdisplaysSearchBarInNavigationBar = YES
これを簡単に機能させるため。
ドキュメントごと:
IOS 7.0以降では、検索ディスプレイコントローラーのdisplaysSearchBarInNavigationBarおよびnavigationItemプロパティを構成することにより、ナビゲーションバー(UINavigationBarクラスのインスタンス)で検索ディスプレイコントローラーを使用できます。
あるコメント者が述べたように、searchDisplayController.displaysSearchBarInNavigationBar = true
は、既存の左/右バーボタン項目を非表示にします。
IOS7のsearchBar
の新しいプロパティを使用して、navigationBar
をsearchDisplayController
に追加する2つの異なる方法を見つけました。
1)ペン先ベースのアプローチ
.xibを使用している場合、この値にユーザー定義のランタイム属性を設定できます。何らかの理由で、leftBarButtonItemはそのまま残ります。 rightBarButtonItemでテストしていません。
2)コード(タイミングの問題)
コードで実装する場合、タイミングが重要と思われます。最初にsearchBar
をnavigationBar
に追加してから、barButtonItem
を設定する必要があるようです。
- (void)viewDidLoad
{
...
self.searchDisplayController.displaysSearchBarInNavigationBar = true;
self.navigationItem.leftBarButtonItem = [UIBarButtonItem new];
...
}
Appleの ICatalog サンプルコードをご覧ください。新しいUISearchController
を3つの異なる方法で使用する方法を示します:モーダル、ナビゲーションバー、ナビゲーションバーの下。
Objective Cコードスニペット
- (void)viewDidLoad {
UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
if (@available(iOS 11.0, *)) {
self.navigationItem.searchController = searchController;
} else {
self.navigationItem.titleView = searchController.searchBar;
}
}
続きを読む こちら