Ich hänge einen UISearchController an die navigationItem.searchController
Eigenschaft eines UITableViewController unter iOS 11 an. Dies funktioniert einwandfrei: Ich kann die schöne Suchleiste im iOS 11-Stil verwenden.
Ich möchte jedoch die Suchleiste beim Start sichtbar machen. Standardmäßig muss der Benutzer in der Tabellenansicht nach oben scrollen, um die Suchleiste anzuzeigen. Weiß jemand, wie das möglich ist?
Links: Standardsituation nach dem Start. Rechts: Suchleiste sichtbar gemacht (durch Scrollen nach oben). Ich möchte, dass die Suchleiste nach dem Start wie im rechten Screenshot sichtbar ist.
Ich habe bereits festgestellt, dass die Suchleiste sichtbar gemacht werden kann, indem die Eigenschaft hidesSearchBarWhenScrolling
meines Navigationselements auf false gesetzt wird. Dies führt jedoch dazu, dass die Suchleiste immer sichtbar ist - auch wenn Sie nach unten scrollen -, was ich nicht möchte.
quelle
hidesSearchBarWhenScrolling
firstResponder
?scrollView.setContentOffset(_:animated)
. Hat jemand einen Vorschlag?hidesSearchBarWhenScrolling = false
setzt die Suchleiste in iOS 13 über einen großen Titel. Irgendeine Idee, ob ich das irgendwie aktualisieren kann?Antworten:
Im Folgenden wird die Suchleiste zuerst sichtbar und beim Scrollen ausgeblendet:
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) if #available(iOS 11.0, *) { navigationItem.hidesSearchBarWhenScrolling = false } } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) if #available(iOS 11.0, *) { navigationItem.hidesSearchBarWhenScrolling = true } }
Wenn Sie
isActive
nicht das getan haben, was ich wollte, wird die Suchleiste aktiviert (mit der Schaltfläche "Abbrechen" usw.), wenn ich nur möchte, dass sie sichtbar ist.quelle
viewDidLoad
anstelle vonviewWillAppear
searchController.searchBar.isHidden = false
in viewDidLoad nicht der Fall ist? Letzteres erscheint mir weitaus logischerSie können die Eigenschaft
isActive
auftrue
festlegen, nachdem Sie den searchController zum hinzugefügt habennavigationItem
.Genau wie dieser:
override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) searchController.isActive = true }
quelle
isActive
ist ein schreibgeschützter Boolescher Wert. Sie möchtensearchController.active = true
stattdessen verwenden.Bei mir hat es funktioniert, nachdem ich folgende Zeilen in die
viewDidLoad()
Methode eingefügt habe:navigationController?.navigationBar.prefersLargeTitles = true navigationController!.navigationBar.sizeToFit()
quelle
Unter iOS 13 funktionierte die Antwort von @Jordan Wood nicht. Stattdessen habe ich:
override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) UIView.performWithoutAnimation { searchController.isActive = true searchController.isActive = false } }
quelle