Bis iOS 11 veröffentlicht wurde, hatte ich eine Suchleiste zu einem UITableViewController hinzugefügt. Es ist unter einer Navigationsleiste versteckt und sichtbar, wenn der Benutzer die Tabelle scrollt. Auf iOS11 wird durch das Anpassen von contentOffset oder tableview.bound die Suchleiste nicht ordnungsgemäß ausgeblendet, manchmal funktioniert sie und manchmal wird auch die erste Zeile ausgeblendet. Also habe ich beschlossen, die Suchleiste in die Navigationsleiste zu verschieben. Aber aus irgendeinem Grund sehe ich es nirgends. Hier ist mein Code bei viewDidLoadSearchController auf der Navigationsleiste ist auf iOS11 unsichtbar
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;
}
EDITED: 2017.10.20 Wie bereits angedeutet, habe ich umbenannt und die Struktur vereinfacht.
Ich habe die folgende Struktur auf Storyboard. UINavigationController: Anfängliche Ansicht Controller YearPageViewController: Inside, hat es YearTableViewController
Auf iOS10 funktioniert es gut. Auf iOS 11 sehe ich die searchBar nicht. Danke für Ihre Eingabe.
Warum setzen Sie es auf dem parent? – Fraser
Auch benennen Sie Ihren UITableViewController "searchController" ist verwirrend – Fraser
Wenn ich [Self.navigationItem setSearchController: self.searchController], ich werde nicht die Suchleiste sehen. – yoshitech