2015-08-06 12 views
6

Ho un'istanza di UISearchBar aggiunta alla vista titolo di una UINavigationBar. Quando v'è un testo già impostato e la barra di ricerca inizia a modificarlo ridimensiona il suo contenuto per consentire lo spazio per il pulsante Annulla, anche se, l'animazione risultante si estende il testo, come mostrato nella gif sottoUISearchBar allunga il testo quando inizia la modifica

enter image description here

C'è tutto ciò che può essere fatto per evitare questo effetto ? Ho provato a rimuovere il testo e quindi a riaggiungerlo qualche istante dopo, sebbene funzioni, non è una soluzione elegante.

Aggiornamento


Sulla base @ risposta di Paruru ho cercato di anticipare l'animazione del pulsante Cancel e non sembra male. Quello che ho fatto è che forzo la presentazione del pulsante Cancel su searchBarShouldBeginEditing:

extension SearchViewController: UISearchBarDelegate { 

    func searchBarShouldBeginEditing(searchBar: UISearchBar) -> Bool { 
     if searchBar.text?.isEmpty == false { 
      // This avoids the text being stretched by the UISearchBar. 
      searchBar.setShowsCancelButton(true, animated: true) 
     } 
     return true 
    } 

} 

Il risultato finale è quello che voglio raggiungere, l'animazione senza il testo viene allungato. Considero questo una soluzione alternativa, quindi aspetterò altre risposte in quanto questo codice potrebbe non essere a prova di futuro.

+1

La tua soluzione aggiornata funziona alla grande, dovresti postarla come risposta in modo da poterla sospendere! –

+0

HI Alex, non voglio renderlo la risposta corretta in quanto è un hack e potrebbe essere dannoso per le versioni più recenti di iOS, che potrebbero avere una soluzione al problema dell'animazione. – vfn

risposta

1
- (void)setShowsCancelButton:(BOOL)showsCancelButton animated:(BOOL)animated NS_AVAILABLE_IOS(3_0); 

Basta chiamare il metodo senza animazione.

if (!self.isShowCancelBtn) { 
    [self.searchBar setShowsCancelButton:YES animated:NO]; 
    self.isShowCancelBtn = YES; 
}else{ 
    [self.searchBar setShowsCancelButton:NO animated:NO]; 
    self.isShowCancelBtn = NO; 
} 
+1

Ciò farà entrare e uscire il pulsante dalla barra di ricerca, e non è quello che mi piacerebbe ottenere. Ho detto sopra che ho trovato un lavoro in giro. Quello che sto cercando è una soluzione non un'altra soluzione bandaid – vfn

2

La soluzione aggiornata funziona bene, tranne che si ferma il segnaposto "Cerca" di essere animato a sinistra quando il pulsante Cancel appare mentre non v'è alcun testo. Controllo searchBar.text ripristina l'animazione:

func searchBarShouldBeginEditing(searchBar: UISearchBar) -> Bool { 
    // This avoids the text being stretched by the UISearchBar. 
    if searchBar.text?.isEmpty == false { 
     searchBar.setShowsCancelButton(true, animated: true) 
    } 
    return true 
} 

ho il sospetto che questo può essere solo un problema per la MinimalUISearchBarStyle.

+0

Grazie Alex! Aggiornerò la domanda, aggiungendo il tuo suggerimento – vfn

+0

Invece di 'searchBar.text? .isEmpty == false' usa'! SearchBar.text? .isEmpty' – SDJMcHattie

Problemi correlati