2017-09-27 13 views
0

Ich muss eine Suchleiste oben in meiner Tabelle platzieren. Ich mache einen Netzwerkanruf, und wenn die Ergebnisse größer als 100 sind, möchte ich die Bar suchen und wenn sie weniger als 100 sind, möchte ich die Bar nicht suchen. Die Tabellenansicht befindet sich auf der rechten Seite des VC und belegt nicht den gesamten View-Controller. Ich möchte, dass die Suchleiste oben in der Tabellenansicht als Überschrift angezeigt wird.Suchleiste als Kopfzeile in der Tabellenansicht - erscheint und verschwindet

Ich kann einen Suchcontroller nicht verwenden, da in iOS 11 die Verwendung eines Suchcontrollers dazu führt, dass die Suchleiste an die Spitze der VC springt, wenn sie aktiv ist.

Ich habe versucht, den Tableviewheader auf Null zu setzen, damit er verschwindet. Aber ich kann es offensichtlich nicht zurückbekommen, weil ich den Header nil gemacht habe.

self.rightDetailFilterTableView.tableHeaderView = nil 
self.rightDetailFilterTableView.sectionHeaderHeight = 0 

Ich habe die Suchleiste in das Storyboard gesetzt, wie im Bild unten zu sehen ist. Ist das der richtige Weg, die Suchleiste als Überschrift hinzuzufügen?

enter image description here

Was ist der beste Weg, um es zu bekommen, um in der Tableview zu erscheinen und verschwinden? Ich habe eine Reihe verschiedener Methoden ausprobiert. Sie hinterlassen entweder einen leeren Header oder machen etwas anderes, das Probleme verursacht. Ich habe auch versucht, die Header-Delegate-Methoden, aber das hat immer noch nicht funktioniert.

Ich verwende keinen Tableview-Controller, ich verwende einen normalen VC. Ich verwende auch keinen Search-Bar-Controller wegen Problemen, die es in iOS 11 verursacht.

+0

Mögliche Duplikat [ausblenden UITableView Suchleiste] Storyboard ist (https://stackoverflow.com/questions/9798901/ hide-uitableview-search-bar) – ekscrypto

Antwort

1

Hier ist, was ich in einem meiner letzten Projekt getan habe. Zuerst angelegt meine Ansichten wie folgt:

view layouts in Xib

Das heißt, wurde die Suchleiste auf der übergeordneten Ansicht hinzugefügt, anstatt der Tabellenansicht. Dadurch kann ich es nach Bedarf verstecken/anzeigen.

Als nächstes habe ich zwei optionale Layoutbeschränkungen definiert, von denen eine sicherstellt, dass die Tabellenansicht an der Spitze des sicheren Bereichs ausgerichtet ist, Priorität 750; der andere richtet den oberen Rand der Suchleiste an den oberen Rand des sicheren Bereichs aus; Priorität niedriger als 750, um sie unter der Navigationsleiste zu verstecken, oder Priorität höher als 750, um sie anzuzeigen und die Tabellenansicht nach unten zu schieben.

Im Code habe ich eine @IBOutlet die Layout-Einschränkung für die Suchleiste oben auf dem sicheren Bereich, und ich seine Priorität nach Bedarf ändern:

@IBAction 
func toggleSearchBar(_ sender: Any?) { 
    if searchBarVisibleLayoutConstraint.priority.rawValue > 750.0 { 
     searchBarVisibleLayoutConstraint.priority = UILayoutPriority(rawValue: 1.0) 
     searchBar?.endEditing(true) 
    } else { 
     searchBarVisibleLayoutConstraint.priority = UILayoutPriority(rawValue: 999.0) 
    } 
    UIView.animate(withDuration: 0.3) { 
     self.view.layoutIfNeeded() 
    } 
} 

In meinem Fall der Navigationsleiste ist undurchsichtig und die Suchleiste ist dahinter nicht sichtbar. Ihr Fall kann unterschiedlich sein, also möchten Sie vielleicht auch die Elternansicht abschneiden oder die Suchleiste ausblenden, wenn sie nicht sichtbar ist.

Viel Glück!

+1

Ich habe diese Methode nicht genau benutzt, aber es war die Inspiration (LOL) für meine Lösung. Ich habe eine Stapelansicht verwendet, um mit dem unordentlichen Constraint umzugehen. –

0

Bitte überprüfen Sie:

Erstellt IBOutlet für meine SearchBar.

@IBOutlet weak var testbar: UISearchBar! 

Und in meinem viewDidLoad:

override func viewDidLoad() { 
    var contentOffset = tableView.contentOffset 
    let showSearchBar = (results.count > 100) 
    self.tableView.tableHeaderView?.isHidden = !(showSearchBar) 
    if showSearchBar { 
     contentOffset.y -= testbar.frame.size.height 
    } else { 
     contentOffset.y += testbar.frame.size.height 
    } 
    tableView.contentOffset = contentOffset 
} 

Hier meine Tableview enter image description here

+0

Dies wird die Suchleiste ausblenden, aber es ist immer noch Leerraum, wenn es ausgeblendet ist. Ich habe diese Methode ausprobiert und es funktioniert nicht. Durch Einstellen des Inhalts-Offsets wird immer noch Leerraum angezeigt, wenn der Benutzer nach oben scrollt. –

Verwandte Themen