2014-11-24 8 views
5

Quando si esegue una ricerca su un set di dati tramite UISearchBar, i risultati della ricerca vengono visualizzati correttamente nello UITableViewControllerUITableView. Tuttavia, scorrendo verso il basso attraverso i risultati, le righe di UITableView appaiono visibilmente sotto lo UINavigationBar e la barra di stato del simulatore.Risultati della ricerca che si spostano in modo visibile sotto la barra di stato

Scrolling through search results

Questo ovviamente non è l'aspetto che sto andando per. Idealmente, mi piacerebbe che lo UISearchBar fungesse da intestazione del UITableView con tutti i risultati di ricerca che sono contenuti sotto i pulsanti dell'ambito UISearchBar, ma i miei tentativi non hanno avuto successo.

Di seguito è riportata l'impostazione Storyboard delle proprietà relative UITableViewController e UITableView.

Search results table view controller and its table view's properties

Di seguito si riporta il codice relativo che sto usando per impostare la UISearchController e la sua UISearchBar.

BallotTunesSearchTableViewController.h

@interface BallotTunesSearchTableViewController : UITableViewController <UISearchControllerDelegate, UISearchResultsUpdating, UISearchBarDelegate> 

BallotTunesSearchTableViewController.m

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.appDelegate = [[UIApplication sharedApplication] delegate]; 

    // Initialize the search controller 
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; 
    self.searchController.searchResultsUpdater = self; 
    self.searchController.dimsBackgroundDuringPresentation = NO; 

    // Setup the search bar 
    self.searchController.searchBar.delegate = self; 
    self.searchController.searchBar.scopeButtonTitles = [NSMutableArray arrayWithObjects:SongScopeName, ArtistScopeName, AlbumScopeName, nil]; 
    self.tableView.tableHeaderView = self.searchController.searchBar; 
} 

Aggiornamento: Si noti che il UITableViewController incorporato in un UINavigationController, e quando si imposta la semitrasparenza del UINavigationBar a NO, lo UISearchBar scivola fuori dalla vista insieme allo UINavigationBar.

Search bar disappears

Si noti inoltre che io non sono l'attuazione del UISearchBar in Storyboard (tuttavia, posso prendere questa strada, se non riesco a ottenere la mia messa a punto corrente al lavoro).

+0

Provare a impostare la barra di spostamento in modo che non sia traslucida. self.navigationController.navigationBar.translucent = NO; –

+0

@MikeWelsh Ottimo suggerimento. Tuttavia, quando si disattiva la traslucenza di 'UINavigationBar',' UISearchBar' esegue il roll-out della vista quando selezionato perché si basa sull'essere incorporato in 'UINavigationBar'. – Ryan

+0

Questo VC è incorporato in un UINavigationController? Come stai presentando questa ricerca VC? –

risposta

4

Dopo diverse palme faccia, tutto si riduceva alla mancanza di questa riga di codice:

self.definesPresentationContext = YES; 

Impostazione del contesto di presentazione a YES indica che l'opinione della controller della vista dovrebbe essere coperto quando il controller della vista presenta la UISearchController.

+0

Alcune note in più, devi aggiungere self.definesPresentationContext = true nel controller della vista di presentazione. Per me, non ha funzionato se il controller di visualizzazione presentava la barra di stato nascosta, dovevo renderlo visibile come nel controller della visualizzazione dei risultati di ricerca –