2017-10-01 11 views
1

iOS 11がリリースされるまで、私は検索バーをUITableViewControllerに追加しました。ナビゲーションバーの下に隠され、ユーザーがテーブルをスクロールすると表示されます。 iOS11では、contentOffsetやtableview.boundを調整しても検索バーが適切に隠れず、時にはうまく機能しないことがあります。また、最初の行が隠れることもあります。そこで、検索バーをナビゲーションバーに移動することに決めました。しかし何らかの理由で私はどこにも見ません。ここでEDITEDのviewDidLoadナビゲーションバーのSearchControllerはiOS11では表示されません

YearTableViewController.m 

- (void)viewDidLoad 
{ 

[super viewDidLoad]; 


if (@available(iOS 11.0, *)) { 

//iOS11 -> on navigation bar 
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; 
self.searchController.searchResultsUpdater = self; 
self.searchController.delegate = self; 
self.searchController.searchBar.delegate = self; 
self.searchController.searchBar.barStyle = UISearchBarStyleDefault; 
self.searchController.searchBar.showsCancelButton = NO; 
[self.searchController.searchBar sizeToFit]; 
self.searchController.hidesNavigationBarDuringPresentation = NO; 
self.searchController.dimsBackgroundDuringPresentation = YES; 
[self.navigationItem setSearchController:self.searchController]; 
[self.navigationController.navigationBar setPrefersLargeTitles:NO]; 
[self.navigationItem setLargeTitleDisplayMode:UINavigationItemLargeTitleDisplayModeNever]; 
self.definesPresentationContext = YES; 


} else { 

//iOS10 or previous -> on table view 
UITableViewController *tableViewControllerForSearch = [[UITableViewController alloc]initWithStyle:UITableViewStylePlain]; 
tableViewControllerForSearch.tableView.dataSource = self; 
tableViewControllerForSearch.tableView.delegate = self; 
tableViewControllerForSearch.tableView.estimatedRowHeight = 40; 
tableViewControllerForSearch.tableView.rowHeight = UITableViewAutomaticDimension; 
self.searchController = [[UISearchController alloc] initWithSearchResultsController:tableViewControllerForSearch]; 
self.searchController.searchResultsUpdater = self; 
self.searchController.delegate = self; 
self.searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x, self.searchController.searchBar.frame.origin.y, self.searchController.searchBar.frame.size.width, 44.0); 
self.tableView.tableHeaderView = self.searchController.searchBar; 
self.definesPresentationContext = YES; 
// No border between cells 
tableViewControllerForSearch.tableView.separatorStyle = UITableViewCellSelectionStyleNone; 

} 

での私のコードは次のとおりです示唆したように2017年10月20日には 、私は名前を変更し、構造を簡素化しました。

私はストーリーボード上に以下の構造を持っています。 UINavigationController:初期ビューコントローラ YearPageViewController:内部にYearTableViewControllerがあります

iOS10では正常です。 iOS 11では、searchBarは表示されません。 入力いただきありがとうございます。

+0

あなたはparentViewControllerでそれを設定しているのはなぜ? – Fraser

+0

あなたのUITableViewControllerの名前を「searchController」と混同しています – Fraser

+0

[self.navigationItem setSearchController:self.searchController]を実行した場合、検索バーは表示されません。 – yoshitech

答えて

0

は何

self.navigationItem.hidesSearchBarWhenScrolling = NO; 

の追加について明らかに検索バーは、デフォルトでは非表示にのみスクロール時に見られるようになっています。

+0

これは私の将来のアップデートで試してみますが、これまでのところはうまくいきません。私は同様の構造(ビューコントローラスタック)でサンプルアプリケーションを作成することができますし、UITableViewControllerの親としてUIPageViewControllerを持っていると思われます。ありがとう。 – yoshitech

0

希望はiOS11

if #available(iOS 11.0, *) { 
    self.navigationItem.hidesSearchBarWhenScrolling = NO; 
} 

で参考になりまし私はあなたのビューコントローラがスタックである理由を知られます。セット 'NO' dimsBackgroundDuringPresentationでフラグを

self.searchController.dimsBackgroundDuringPresentation = NO; 
+0

これは私の将来のアップデートで試してみますが、これまでのところはうまくいきません。私は同様の構造(ビューコントローラスタック)でサンプルアプリケーションを作成することができますし、UITableViewControllerの親としてUIPageViewControllerを持っていると思われます。ありがとう。 – yoshitech

+0

あなたのコードでこのフラグを変更しても問題ありません。self.searchController.dimsBackgroundDuringPresentation = NO; –

関連する問題