10

Ich habe ein UITableView mit einer UISearchController Suchleiste in den UINavigationBar, alles funktioniert perfekt, aber wenn ich ein Ergebnis der gesuchten Ergebnisse der UISearchController schieben, und ich komme die UITableView wieder unter den NavBar, das ist, wie ich initialisieren die UISearchController:UITableView mit UISearchController unter navbar gehen, wenn in einer Ergebnisansicht eingeben und kommt zurück

 self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; 
     self.searchController.delegate = self; 
     self.searchController.searchResultsUpdater = self; 

     self.searchController.searchBar.delegate = self; 
     self.searchController.dimsBackgroundDuringPresentation = NO; 
     self.searchController.hidesNavigationBarDuringPresentation = NO; 
     self.searchController.searchBar.placeholder = NSLocalizedString(@"Local Search", @""); 
     self.searchController.searchBar.frame = CGRectMake(0, -5, [UIScreen mainScreen].bounds.size.width, 44); 


     ctrl = [[UIView alloc] initWithFrame:CGRectMake(0, 0,[UIScreen mainScreen].bounds.size.width, 44)]; 
     ctrl.backgroundColor = [UIColor clearColor]; 
     ctrl.autoresizingMask = UIViewAutoresizingFlexibleWidth; 
     [ctrl addSubview:self.searchController.searchBar]; 
     self.navigationItem.titleView = ctrl; 
     self.definesPresentationContext = YES; 

die Suchleiste perfekt in den UINavigationBar angezeigt wird, dann, wenn ich etwas suchen und ich schiebe den view-Controller von einem Ergebnis wie dies:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; 
    DetailListController *detailList = [[DetailListController alloc] init]; 
    [self.navigationController pushViewController:detailList animated:YES]; 
} 

wenn ich auf die UITableView zurückkommen dies zu tun:

[self.navigationController popViewControllerAnimated:YES]; 

die UITableView ist unter dem UINavigationBar, wie kann ich dieses Problem beheben?

dank

Antwort

9

Ich hatte genau das gleiche Problem, extendedLayoutIncludesOpaqueBars-YES/true in View-Controller-Einstellung zeigt, dass Suchsteuerung, scheint es zu beheben.

Als ein Wort der Vorsicht: Einstellung dieser Eigenschaft ändert den Wert der vertikalen Inhaltsversatz der Bildlaufansicht.

0

Was mir geholfen, war meine eigenen Layout-Beschränkungs programmatisch

tableView.top <-> tableView.superview.top 

statt in der Regel

zum Erstellen
tableView.top <-> tableView.superview.topLayoutGuide 

und Einstellung

view.edgesForExtendedLayout = .Top 

ich unzählige Kombinationen von Layouts ausprobiert habe und Einschränkungen und nichts hat außer diesem funktioniert. Wirklich nerviger Bug

7

Dies ist ein extrem frustrierender Fehler in UIKit. Was passiert, ist, dass der oberste Layout-Guide des präsentierenden View-Controllers auf 0 zurückgesetzt wird, was bedeutet, dass er sich jetzt unterhalb der Navigationsleiste befindet. Der Layout-Leitfaden ist eine schreibgeschützte Eigenschaft, die Sie nicht direkt bearbeiten können. Allerdings habe ich einen Hack erstellt, um ihn auf den korrekten Wert zurückzusetzen. Fügen Sie das zu Ihrem UISearchControllerDelegate hinzu:

- (void)didDismissSearchController:(UISearchController *)searchController 
{ 
    UINavigationController *nav = self.navController; // you muse save this earlier 

    // force to layout guide to reset by pushing a dummy controller and popping it right back 
    [nav pushViewController:[UIViewController new] animated:NO]; 
    [nav popViewControllerAnimated:NO]; 
} 
+4

Einer von denen, die funktioniert, aber Sie sich traurig fühlen. – GuillermoMP

+0

danke. das funktioniert. aber ich stimme zu, es ist eine traurige Lösung –

+0

Hat jemand ein offenes Radar dafür geöffnet? – PaulRBerg

Verwandte Themen