2016-01-29 18 views
7

OK, ci ho dedicato 8+ ore senza fortuna.UISearchController Search Bar Position Gocce 64 punti

La barra di ricerca vengono visualizzati esattamente 64 punti troppo basso:

enter image description here

Tutti gli altri fotogrammi sono esattamente corretto.

Modifica: - È la vista UISearchController che sta sbagliando origin.y. Esso viene impostato a 64, quando dovrebbe essere 0. Se aggiungo questo metodo:

- (void)didPresentSearchController:(UISearchController *)searchController 
{ 
    [super didPresentSearchController:searchController]; 
    searchController.view.frame = CGRectMake(0, 0, searchController.view.frame.size.width, searchController.view.frame.size.height); 

} 

Poi i punti di vista allineare. Tuttavia, è janky perché salta. Se modifico il frame in willPresentSearchController, non funziona, poiché il controller deve eseguire una sorta di layout dopo la sua presentazione.

Se utilizzo SparkInspector e modifica il frame di UISearchBarContainerView dall'origine 64 (a cui viene impostato a, 0), il problema è risolto.

Ecco la mia configurazione rilevanti:

self.searchResultsController = [[GMSearchTableViewController alloc] init]; 
self.definesPresentationContext = YES; 
self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchResultsController]; 
self.searchController.dimsBackgroundDuringPresentation = YES; 
self.searchController.hidesNavigationBarDuringPresentation = NO; 
self.searchController.searchBar.frame = CGRectMake(0, 0, self.view.frame.size.width, 44); 
[self.view addSubview:self.searchController.searchBar]; 

non sto usando Interface Builder, tutto è configurato nel codice. Sono sicuro che l'impostazione definesPresentationContext sia corretta.

Il VC si trova in un normale UINavigationController, che si trova all'interno di un SplitViewController (ma il problema esiste anche su iPhone).

Qualche idea? Mi sento come se mi mancasse una semplice opzione di configurazione per quanto riguarda lo UINavigationBar

Ho anche un controller diverso che utilizza un modello di Container View Controller personalizzato, che è più complesso e che funziona.

Quando ho creato

self.definesPresentationContext = NO; 

Questo accade: enter image description here

Così ora la UISearchBar ottiene posizionato correttamente, ma il contesto di presentazione è sbagliato, causando vista tabella s il UISearchController' ad occupare la visualizzazione completa .

+0

Grazie per avermi dato una soluzione nella tua domanda. Ha aiutato. se stesso.definePresentationContext = NO; – Coder

risposta

10

Bene in modo classico, ho trovato una soluzione (https://stackoverflow.com/a/30010473/579217)

Questo fa il trucco:

- (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar 
{ 
    if (bar == self.searchController.searchBar) { 
    return UIBarPositionTopAttached; 
    } 
    else { // Handle other cases 
    return UIBarPositionAny; 
    } 
} 
0

Se il tableView è UITableView costume e non un UITableViewController si dovrebbe nascondere superiore della tableview sotto la barra di navigazione, perché la barra di ricerca viene automaticamente allegata sull'intestazione della vista tabella e se la vista tabella inizia sotto la barra di navigazione causo questo problema. Basta fare in modo che la tabella visualizzi a schermo intero dall'alto della barra di navigazione.

+0

La mia vista tabella è personalizzata, tuttavia allego la barra di ricerca manualmente utilizzando il contenuto della tabella viewInsets invece della vista dell'intestazione, perché lo voglio sempre visibile. Ho avuto il controller di ricerca nascondere la barra di navigazione prima, ma sembrava janky e personalmente mi piace avere la barra di navigazione ancora visibile in modo che l'utente possa accedere rapidamente ad altre azioni mentre sta ancora cercando. – JBlake

+0

Quindi, se la vista tabella è personalizzata basta aggiungere la barra di ricerca prima che la tabella non sia al suo interno. quindi aggiungi la vista tabella nella barra di ricerca e nascondi l'intestazione della vista tabella nella barra di ricerca. sarà come lo desideri :) – rmammadli