2017-10-01 3 views
1

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.

+0

Warum setzen Sie es auf dem parent? – Fraser

+0

Auch benennen Sie Ihren UITableViewController "searchController" ist verwirrend – Fraser

+0

Wenn ich [Self.navigationItem setSearchController: self.searchController], ich werde nicht die Suchleiste sehen. – yoshitech

Antwort

0

Was

self.navigationItem.hidesSearchBarWhenScrolling = NO; 

Offensichtlich ist die Suchleiste hinzugefügt wird standardmäßig ausgeblendet und nur zu sehen ist beim Scrollen.

+0

Ich werde das in meinen zukünftigen Updates versuchen, aber bis jetzt funktioniert es nicht. Ich kann eine Beispielanwendung mit ähnlichen Strukturen erstellen (View Controller Stacks), und ich vermute, dass UIPageViewController als Eltern von UITableViewController das Problem verursacht. Vielen Dank. – yoshitech

0

Hope Sie hilfreich Auf iOS11

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

ich bekannt, warum Ihre View-Controller-Stacks ist. set 'NO' Flagge in dimsBackgroundDuringPresentation

self.searchController.dimsBackgroundDuringPresentation = NO; 
+0

Ich werde das in meinen zukünftigen Updates versuchen, aber bis jetzt funktioniert es nicht. Ich kann eine Beispielanwendung mit ähnlichen Strukturen erstellen (View Controller Stacks), und ich vermute, dass UIPageViewController als Eltern von UITableViewController das Problem verursacht. Vielen Dank. – yoshitech

+0

ändern Sie dieses Flag in Ihrem Code, es funktioniert gut self.searchController.dimsBackgroundDuringPresentation = NO; –

Verwandte Themen