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は表示されません。 入力いただきありがとうございます。
あなたはparentViewControllerでそれを設定しているのはなぜ? – Fraser
あなたのUITableViewControllerの名前を「searchController」と混同しています – Fraser
[self.navigationItem setSearchController:self.searchController]を実行した場合、検索バーは表示されません。 – yoshitech