2013-12-10 19 views
5

Ich habe eine UITableView, die nicht die gesamte Ansicht erreicht. Approximativ ist die UITableView zweimal kleiner als die Ansicht.UISearchBar gehe auf die Oberseite der Ansicht, wenn ich darauf klicke

Dann füge ich hinzu „Bar Suche und Display-Controller Suche“ zum UITableView aus der Objektbibliothek. Zur Visualisierung erscheint die Suchleiste in der Mitte des Bildschirms.

Hier ist meine Ansicht:

enter image description here

Mein Problem: Als ich in das Suchfeld klicken meine Forschung zu tun, ist die SearchBar an die Spitze der Ansicht gehen, anstelle von die Navigationsleiste! Und der Übergang ist sehr schrecklich ... Wie kann ich die searchBar einschränken, um an ihrem ursprünglichen Platz zu bleiben?

+0

Haben das gleiche genaue Problem und ich würde es sofort anfordern. Die Suchleiste soll nach oben verschoben werden, aber das Problem ist der leere Platz auf dem Tisch. Ich glaube, da die Ansicht des Controllers nicht nur eine Tabellenansicht ist, kann die Suchleiste die Tabellenansicht nicht direkt bearbeiten, um den leeren Bereich zu überdecken. – giorashc

+0

@giorashc Sie haben einen Rahmen für self.searchDisplayController oder self.searchDisplayController.searchResultsTableView festgelegt. Versuchen Sie, Rahmen dafür zu setzen .. und lassen Sie mich wissen - – the1pawan

+0

Verwenden Sie einfache UISearchBar anstelle von UISearchDisplayController – iEinstein

Antwort

5

Das Problem hängt mit dem Such-Display-Controller zusammen. Sie haben nicht die Kontrolle über die Animation und es scheint nicht gut damit umzugehen, wenn eine Ansicht auf Ihrem TableView sitzt. Wir hatten genau das gleiche Problem und der einfachste Weg, den wir behoben haben, besteht darin, den Search Display Controller durch eine einfache Suchleiste im Storyboard zu ersetzen.

Das bedeutet, dass Ihre Klasse jetzt die Delegate-Methode der Suchleiste implementieren muss, um ordnungsgemäß zu funktionieren.

Um richtig animieren, einfach überschreiben die searchBarTextDidBeginEditing und searchBarTextDidEndEditing wie so:

- (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; }]; 
} 

Einfach gesagt, man muss nur die Tabellenansicht Rahmen über die Höhe auf es basiert Ansicht bewegen. Die Animation macht es glatter und sauberer.

Verwandte Themen