2014-10-29 19 views
7

Sto cercando di capire perché la mia intera barra di navigazione scompare quando inizio a digitare in UISearchController.searchBar Si carica correttamente e si anima correttamente, ma perdo il NavBar attivo quando inizio digitando. Ecco il codice per caricare il searchController da viewDidLoad:La barra di navigazione scompare quando si digita nel campo di testo UISearchController

UITableViewController *searchResultsController = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain]; 

    searchResultsController.tableView.dataSource = self; 
    searchResultsController.tableView.delegate = self; 
    searchResultsController.tableView.backgroundColor = [UIColor redColor];  

    self.searchController = [[UISearchController alloc] initWithSearchResultsController:searchResultsController]; 
    self.searchController.delegate = self; 
    self.searchController.searchResultsUpdater = self; 
    self.searchController.dimsBackgroundDuringPresentation = YES; 
    self.searchController.hidesNavigationBarDuringPresentation = NO; 

    [self.searchController.searchBar sizeToFit]; 

    self.tableView.tableHeaderView = self.searchController.searchBar; 
    self.definesPresentationContext = NO; 

Ed ecco il risultato dopo si digita:

enter image description here

Notate come la visualizzazione della tabella è lì, ma sembra occupare lo spazio del controller di navigazione e si estende verso il basso nella prima intestazione della sezione. Qualche idea?

Grazie.

+0

Hai risolto questo? – eestein

+0

posta sotto la soluzione, ma non sono ancora sicuro di quale fosse il problema. =] – 4m1r

+0

np, grazie, darò un'occhiata a quello – eestein

risposta

2

È necessario impostare definePresentationContext su YES. Dalle mele Esempio:

// Search is now just presenting a view controller. As such, normal view controller 
// presentation semantics apply. Namely that presentation will walk up the view controller 
// hierarchy until it finds the root view controller or one that defines a presentation context. 

self.definesPresentationContext = YES 
0

questo lavoro per me

self.navigationController.navigationBar.translucent = true;

0

Così, ero finalmente in grado di risolvere questo problema con questa sequenza di inizializzazione. Tuttavia, non sono troppo sicuro di quello che ho fatto per farlo accadere. Al momento sono piuttosto impegnato, quindi mi limiterò a incollare questa soluzione e accetterò una soluzione se qualcuno riuscirà a individuarla.

- (void)loadSearchBar 
{ 

    NSLog(@"Loading SearchBar"); 

    UITableViewController *searchResultsController = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain]; 
    UITableView *myTv = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] bounds] style:UITableViewStylePlain]; 
    searchResultsController.tableView = myTv; 
    searchResultsController.tableView.dataSource = self; 
    searchResultsController.tableView.delegate = self; 
    searchResultsController.tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag; 
    searchResultsController.tableView.sectionIndexColor = [UIColor colorWithHexString:linkBlue]; 

    self.searchResultsController = searchResultsController; 

    self.searchController = [[UISearchController alloc] initWithSearchResultsController:searchResultsController]; 
    self.searchController.delegate = self; 
    self.searchController.searchResultsUpdater = self; 
    self.searchController.dimsBackgroundDuringPresentation = YES; 
    self.searchController.hidesNavigationBarDuringPresentation = NO; 
    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.searchBar = self.searchController.searchBar; 
    self.searchBar.autocorrectionType = UITextAutocorrectionTypeNo; 
    self.searchBar.autocapitalizationType = UITextAutocapitalizationTypeNone; 
    self.searchBar.delegate = self; 
    self.searchBar.translucent = YES; 
    self.tableView.tableHeaderView.layer.zPosition++; 

    self.tableView.tableHeaderView = self.searchController.searchBar; 
    self.definesPresentationContext = YES; 

    //add color to search field 
    UIView *subviews = [self.searchBar.subviews lastObject]; 
    UITextField *textView = (id)[subviews.subviews objectAtIndex:1]; 

    textView.backgroundColor = [UIColor colorWithHexString:textFieldBlue]; 

} 
Problemi correlati