2013-12-13 19 views
20

Abbiamo una classe SearchTableViewController che contiene uno UISearchBar come tableViewHeader del suo UITableView. Utilizziamo anche un UISearchDisplayController il cui delegato (searchResultsDelegate e searchResultsDataSource) è lo stesso controller che contiene la tabellaView contenente la barra di ricerca.UISearchBar in UITableViewHeader strana animazione su iOS 7/8

Ricerca per sé funziona bene, ma l'animazione quando si entra/esce dalla modalità di ricerca è davvero strano:

Weird animation 1

In un altro controller della vista (una sottoclasse di SearchTableViewController), la questione è ancora più evidente :

Weird animation 2

ho provato attuazione dei vari metodi UISearchDisplayDelegate (come -(void)searchDisplayControllerWillBeginSearch:), ma vengono chiamati troppo tardi (quando l'animazione è già terminata) o solo quando il campo di testo UISearchBar s è attivo. Ci sono dei metodi che mi mancano che potrebbero permettermi di modificare l'animazione prima dello? Inoltre, notare come la barra di navigazione scompare immediatamente nel primo video. Ho provato a impostarlo manualmente su "non nascosto" in più punti, che non ha cambiato nulla.

Il nostro navigationBar è configurato per non essere traslucido, se questo fa alcuna differenza. Su iOS 6, tutto funziona come previsto, la barra di ricerca spinge senza problemi la barra di navigazione verso l'alto.

Inserirà il codice se necessario, ma non stiamo modificando il comportamento standard in alcun modo (impostazione di frame, metodi di delega di sovrascrittura, ecc.).

Qualche idea quale potrebbe essere la causa delle strane animazioni?

risposta

29

Ho parlato con un ingegnere Apple presso iOS 7 Tech Talks, che non ha potuto aiutarmi. Dopo ulteriori indagini, ho trovato il primo problema come comportamento predefinito per iOS 7 (.0.4).

Aggiornamento: il bug è ancora presente in 7.1.

Secondo aggiornamento: il bug è ancora presente in 8.1.

Terzo aggiornamento: il bug è ancora presente in 8.4.

quarto aggiornamento: Il bug è ancora presente nel 9,2

Procedura per riprodurre:

  1. Creare una nuova applicazione di esempio Master-Detail universale in Xcode 5/iOS 7 SDK.
  2. Aggiungi un UISearchBar (EDIT: per iOS 8, utilizzare una "barra di ricerca e di ricerca Controller") per TableView del MasterViewController (non importa se in InterfaceBuilder o in codice)
  3. Eseguire il progetto, abilitare animazioni lente e fare clic sulla barra di ricerca.
  4. Le animazioni all'avvio/annullamento della ricerca sono strane sull'iPad, ma sono perfette su iPhone: Template project run on the iPad. Ho archiviato una segnalazione di bug, aggiornerò se il problema si risolve.

Circa il secondo strana animazione: Il problema era che il primo controller di vista è stato creato da un pennino mentre il secondo è stato creato a livello di codice. Pertanto, le seguenti chiamate mancavano:

[self setAutomaticallyAdjustsScrollViewInsets:YES]; 
[self setExtendedLayoutIncludesOpaqueBars:YES]; 

Dopo aver incluso queste due linee nel viewDidLoad:, l'animazione appare 'bene' - cioè, uguale buggy come quello del progetto di esempio.

+0

l'animazione utilizzando 'setExtendedLayoutIncludesOpaqueBars: affermativa sembra molto meglio per me ora con un 'UISearchBar' in una vista di intestazione di tabelle usando' UISearchDisplayController'. Ma ancora non è perfetto. Sembra un bug in UIKit. – choise

+4

'[self setExtendedLayoutIncludesOpaqueBars: YES];' ha fatto il trucco per me. Grazie mille! –

1

La mia risposta here aiutato la mia situazione specifica per lo strano comportamento di animazione:

ho scoperto che

self.navigationController.navigationBar.translucent = YES; 

reso il mio animazione meno errori

Problemi correlati