2016-05-24 5 views
3

deaktivieren Ich möchte ein UISearchBar auf meinem tableView implementieren.Meine UISearchBar bewegt sich nach oben (animiert) -> will

Mein Code (in viewDidLoad):

self.searchController = UISearchController(searchResultsController: nil) 
self.searchController.searchResultsUpdater = self 
self.searchController.delegate = self 
self.searchController.searchBar.delegate = self 
self.searchController.searchBar.autocapitalizationType = .None 
self.searchController.searchBar.autocorrectionType = .No 

self.searchController.hidesNavigationBarDuringPresentation = false 
self.searchController.dimsBackgroundDuringPresentation = false 

self.tableView.tableHeaderView = self.searchController.searchBar 

Wenn ich auf dem searchBar klicken, diesem Schritt nach oben, wie es die navigationBar will verstecken:

When the searchbar is waiting

When I click in the searchbar

Ich suchte auf vielen Posts nach einer Antwort, aber nichts funktioniert. Ich möchte diese Animation deaktivieren, damit sich die searchBar nicht bewegt.

+0

versuchen Sie dies self.edgesForExtendedLayout = UIRectEdgeNone; – karthik

+0

Vielen Dank für Ihre Antwort. Ich habe 'self.edgesForExtendedLayout = .None' und' self.searchController.edgesForExtendedLayout = .None' ausprobiert. Das Ergebnis ist das gleiche. – Robin

+0

http://stackoverflow.com/questions/27620339/search-bar-getting-hidden-by-navigation-bar-when-becomes-active Dies wird Ihnen helfen – karthik

Antwort

2

Sie die UISearchController denken kann als modal dargestellt werden, wenn Sie die Suche starten. Dies würde gut funktionieren, wenn Du einen üblichen UINavigationController Setup hast, jedoch in einem „maßgeschneiderten“ UI wie deine Sie in Themen wie die Suchsteuerung zu einer falschen Ansicht Anbringen laufen können, usw.

würde ich vorschlagen, nicht UISearchController verwenden in Ihrem Fall und verwenden Sie eine separate UISearchBar initialisiert mit dem Rest Ihrer Schnittstelle (wahrscheinlich in einem Storyboard?), und dann die Suche manuell. Implementieren Sie die UISearchBarDelegate und fügen Sie Ihre eigenen UITableView für die Suchergebnisse hinzu, wenn Sie Ihren Inhalt nicht einfach filtern können.

Obwohl sieht aus wie Sie haben eine tableView var - Sie einfach eine andere Eigenschaft, ähnlich dem als Sie UITableViewDataSource verwenden könnte hinzufügen und speichern gefiltert dort Daten. Wenn Sie also etwas in der UISearchBar haben, verwenden Sie einfach eine gefilterte Datenquelle, wenn Sie Tabellenansichtsdaten neu laden. Zum Beispiel:

var data: [String] 
var filteredData: [String] 

Und dann verwenden filteredData im UITableViewDataSource:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return filteredData.count 
} 

... 

Und dann in der UISearchBarDelegate etwas tun:

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) { 
    // Filter the data you have. For instance: 
    filteredData = data.filter({$0.rangeOfString(searchText).location != NSNotFound}) 
    tableView.reloadData() 
} 
+1

ich ändere. Ich benutze nur eine 'searchBar' ohne ihren Controller. Funktioniert perfekt! Danke – Robin

12

sollten Sie in der Lage sein, dies zu verhindern, indem:

self.searchController.hidesNavigationBarDuringPresentation = false 
+0

Ich denke schon. Und ich tue das, aber das ändert nichts – Robin

1

Fügen Sie diese Zeile in Ihrer viewDidLoad präsentieren Controller: self.extendedLayoutIncludesOpaqueBars = true

Verwandte Themen