2015-08-06 6 views
6

Ich habe eine Instanz einer UISearchBar zur Titelansicht einer UINavigationBar hinzugefügt. Wenn es Text bereits eingestellt und die Suchleiste startet die Bearbeitung es seinen Inhalt ändert die Größe Raum zu ermöglichen, für die Schaltfläche Abbrechen, obwohl die resultierende Animation den Text erstreckt sich, wie weiter untenUISearchBar dehnt Text aus, wenn es mit der Bearbeitung beginnt

im gif zeigte

enter image description here

Gibt es alles, was getan werden kann, um diese defect Wirkung zu vermeiden? Ich habe versucht, den Text zu entfernen und dann ein paar Momente später wieder hinzuzufügen, obwohl es funktioniert, ist es keine elegante Lösung.

aktualisieren


Basierend auf @ Paruru Antwort habe ich versucht, die Animation der Cancel Taste zu antizipieren und es sieht nicht schlecht aus. Was ich getan habe ist, dass ich die Präsentation der Cancel Taste aufzwingen 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 
    } 

} 

Das Endergebnis ist das, was ich erreichen will, die Animation ohne den Text gestreckt wird. Ich halte dies für einen Workaround und warte daher auf andere Antworten, da dieser Code möglicherweise nicht zukunftssicher ist.

+1

Ihre aktualisierte Lösung funktioniert gut, Sie sollten es als Antwort posten, damit ich es verbessern kann! –

+0

HI Alex, ich möchte nicht die richtige Antwort geben, da es ein Hack ist und für neuere Versionen des iOS schädlich sein könnte, die das Animationsproblem beheben könnten. – vfn

Antwort

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

Rufen Sie einfach die Methode ohne animiert.

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

Damit springt die Schaltfläche in die Suchleiste hinein und aus ihr heraus, und das möchte ich nicht erreichen. Ich erwähnte oben, dass ich eine Arbeit gefunden habe. Was ich suche ist eine Lösung keine andere Bandaid-Lösung – vfn

2

Ihre aktualisierte Lösung funktioniert gut, außer es auf „Suchen“ Platzhalter von stoppt nach links animiert wird, wenn die Schaltfläche Abbrechen angezeigt wird, während kein Text ist. searchBar.text Überprüfung stellt die Animation:

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 
} 

Ich vermute, das nur ein Thema für die MinimalUISearchBarStyle sein kann.

+0

Danke Alex! Ich werde die Frage aktualisieren und Ihren Vorschlag hinzufügen. – vfn

+0

Anstatt 'searchBar.text? .isEmpty == false' verwenden Sie'! SearchBar.text? .isEmpty' – SDJMcHattie