2013-09-25 24 views
16

Ho un'applicazione in cui ho un UITableView con sezioni che sono scorrevoli sul lato tramite sectionIndexTitlesForTableView:.Creare una barra di ricerca come nell'app Contatti iOS 7

Nel tableHeaderView dello UITableView voglio aggiungere uno UISearchBar, che voglio comportarmi come quello che Apple sta usando nella loro nuova app Contatti in iOS7. Ma non riesco a farlo funzionare.

La barra di ricerca non è al 100% della larghezza dello schermo, ma ha il lato destro rispetto all'indice di sezione.

Le mie domande sono:

  • Come faccio ad avere la larghezza della barra di ricerca al 100% quando è la tableHeaderView di un UITableView che ha un indice di sezione visibile?
  • Come posso creare una transizione come nell'app Contatti di iOS 7 in cui la barra di navigazione si nasconde e lo sfondo grigio della barra di ricerca si estende fino alla barra di stato?

Ho provato parecchie cose già, inclusa l'aggiunta la barra di ricerca nella barra di navigazione, e l'utilizzo di UISearchBarController, ma non riesco a trovare una buona documentazione sul sito web di Apple su come creare questo. Inoltre, la guida alla transizione da iOS6 a iOS7 non mi è stata di grande aiuto.

Qui ci sono due immagini che illustrano il mio problema: enter image description here enter image description here

risposta

0

due cose:

1) Impostare di sectionIndexBackgroundColor tableView a [UIColor clearColor].

2) implementare il metodo '' viewDidLayoutSubviews per fissare cornice per UISearchBar

- (void)viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews]; 
    CGRect barFrame = self.searchBar.frame; 
    barFrame.size.width = self.view.bounds.size.width; 
    self.searchBar.frame = barFrame; 
} 
5

due differenze principali per il modo in cui Apple fanno il loro app, che risolverà i vostri problemi.

In primo luogo, la loro UISearchBar non è l'headerView per la tabellaView. È una vista separata sopra il tavolo. Dovrai modificare UITableViewController su un UIViewController con UITableView posizionato appena sotto UISearchBar.

In secondo luogo, la loro UISearchBar ha un controller di visualizzazione di ricerca associato. Supponendo che tu stia utilizzando un file storyboard, questo viene fornito in bundle per te: basta aggiungere UISearchBar con Search Display Controller. Questo gestirà tutta la transizione verso la barra di stato per te.

+0

la tua soluzione mette in evidenza i punti chiave. Ho seguito la tua strada e sono riuscito a localizzare la barra di ricerca in cima a tableView. L'unico problema che ho ora è .. quando il campo di testo della ricerca è focalizzato, la barra di ricerca andrà fino in cima, anche per coprire la barra di stato. Non so come posso aggiustarlo? – xialin

+0

La migliore soluzione. Stavo pensando a come fare lo stesso con UITableViewController, ma la verità: è più semplice "costruire" UITableViewController e copiare il codice boilerplate, piuttosto che provare a sovrascrivere "scrollViewDidScroll" –

Problemi correlati