2017-06-10 2 views
0

Ich benutze UISearchController mit einem UITableViewController. Wenn eine Suche läuft und ich eine Zeile in der Tabelle auswähle, um zur Detailansicht zu gelangen, und dann zurück zur Tabellenansicht, wird die erste Zeile der Tabelle hinter der Suchleiste ausgeblendet.Erste Zeile ausgeblendet, wenn die Tabellenansicht erscheint, während der Suchcontroller aktiv ist

Ich kann die erste Reihe zurück in Sicht, aber dann springt es einfach zurück hinter der Suchleiste, wenn ich die Rolle loslasse. So frustrierend!

In viewDidLoad ich habe:

searchController = UISearchController(searchResultsController: nil) 
searchController.searchResultsUpdater = self 
searchController.hidesNavigationBarDuringPresentation = false 
searchController.dimsBackgroundDuringPresentation = false 
definesPresentationContext = true 
mainTable.tableHeaderView = searchController.searchBar 

Entfernen definesPresentationContext = true löst das Problem, aber ich brauche, dass die Suchleiste nicht angezeigt werden, zu verhindern, wenn der Benutzer auf andere Ansicht-Controller segues.

Ich habe stundenlang nach einer Lösung gesucht und verschiedene Möglichkeiten versucht, das Problem zu beheben.

Gibt es eine Möglichkeit, die erste Zeile der Tabelle so festzulegen, dass sie unterhalb der Suchleiste liegt, wenn die Tabellenansicht erneut angezeigt wird?

Ich versuchte SettingsPresentationContext = True PrepareForSegue, aber das hat nicht funktioniert.

+0

schieben Sie Ihren Tisch oder Sammlung durch die Höhe des Such-Controller auf die Sicht von oben mit uiview Animation und Layoutbeschränkungen. – Loxx

Antwort

0

Ich fand einen Weg, um dieses Problem zu lösen.

  1. Setzen Sie nicht definesPresentationContext = true

  2. In (für die Vorbereitung: Absender :), die folgende hinzufügen. Dies hält die Suche aktiv, verhindert jedoch, dass die Suchleiste und die Tastatur auf dem Ansichtscontroller angezeigt werden, zu dem sie geleitet werden.

    searchController.searchBar.isHidden = true 
    searchController.searchBar.endEditing(true) 
    
  3. In ViewWillAppear, fügen Sie Folgendes hinzu. Dadurch wird die Suchleiste sichtbar, wenn der Ansichtscontroller mit dem Suchcontroller an den Anfang des Navigationsstapels gelangt. Die erste Zeile der Tabelle befindet sich unterhalb der Suchleiste.

    searchController.searchBar.isHidden = false 
    
  4. In Willmove (toParentViewController :), fügen Sie die folgende. Dadurch wird jede aktive Suche abgebrochen, wodurch verhindert wird, dass die Suchleiste auf dem Ansichtscontroller erscheint, der an den Anfang des Navigationsstapels kommt.

    if parent == nil { 
        searchController.isActive = false 
    } 
    
Verwandte Themen