2013-12-10 6 views
5

Ho un UITableView che non raggiunge l'intera vista. Approssimativamente, UITableView è due volte più piccolo della vista.UISearchBar andando in cima alla vista quando clicco su di esso

Poi, aggiungo "barra di ricerca e di ricerca Controller" al UITableView dalla libreria oggetto. Quindi, per visualizzare, la barra di ricerca appare al centro dello schermo.

Ecco mio punto di vista:

enter image description here

Il mio problema: Quando clicco nel campo di ricerca a fare la mia ricerca, la barra di ricerca sta per la parte superiore della vista, al posto di la barra di navigazione! E la transizione è molto orribile ... Come posso costringere la searchBar a rimanere nella sua posizione iniziale?

+0

Hanno lo stesso identico problema e stavo per chiederlo. La barra di ricerca è destinata a spostarsi verso l'alto ma il problema è lo spazio vuoto che lascia sul tavolo. Credo che poiché la vista del controller non è solo una vista tabella, la barra di ricerca non può manipolare direttamente la vista tabella per spostarsi e coprire lo spazio vuoto – giorashc

+0

@giorashc hai impostato frame per self.searchDisplayController o self.searchDisplayController.searchResultsTableView. Prova ad impostare la cornice per questo .. e fammi sapere - – the1pawan

+0

Usa semplice UISearchBar invece di UISearchDisplayController – iEinstein

risposta

5

Il problema è correlato al controller del display di ricerca. Non hai il controllo sull'animazione e non sembra gestirlo bene quando c'è una vista su TableView. Abbiamo avuto lo stesso identico problema e il modo più semplice con cui lo abbiamo risolto è la sostituzione del controller di visualizzazione di ricerca con una semplice barra di ricerca nello storyboard.

Ciò significa che la classe ora dovrà implementare il metodo di delega della barra di ricerca per funzionare correttamente.

Per animare correttamente, semplicemente ignorare il searchBarTextDidBeginEditing e searchBarTextDidEndEditing in questo modo:

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { 
CGRect tableViewFrame = self.tableView.frame; 
tableViewFrame.origin.y = tableViewFrame.origin.y - self.yourHeaderView.bounds.size.height; 
[UIView animateWithDuration:0.25 
       animations:^{ self.tableView.frame = tableViewFrame; }]; 
} 

- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar { 
CGRect tableViewFrame = self.tableView.frame; 
tableViewFrame.origin.y = tableViewFrame.origin.y + self.yourHeaderView.bounds.size.height; 
[UIView animateWithDuration:0.25 
       animations:^{ self.tableView.frame = tableViewFrame; }]; 
} 

In poche parole, è sufficiente spostare il telaio vista tabella sopra la vista basato su di esso è altezza. L'animazione lo rende più liscio e pulito.

Problemi correlati