J'attache un UISearchController au navigationItem.searchController
propriété d'un UITableViewController sur iOS 11. Cela fonctionne très bien: je peux utiliser la barre de recherche Nice iOS 11-style.
Cependant, je souhaite que la barre de recherche soit visible au lancement. Par défaut, l'utilisateur doit faire défiler la vue tableau pour voir la barre de recherche. Est-ce que quelqu'un sait comment c'est possible?
Gauche: situation par défaut après le lancement. Droite: barre de recherche rendue visible (par défilement vers le haut). J'aimerais que la barre de recherche soit visible après le lancement, comme dans la capture d'écran de droite.
J'ai déjà constaté que la barre de recherche pouvait être rendue visible en définissant la propriété hidesSearchBarWhenScrolling
de mon élément de navigation sur false. Cependant, la barre de recherche est toujours visible, même lorsque vous faites défiler l'écran, ce qui n'est pas ce que je veux.
Ce qui suit rend la barre de défilement visible au début, puis lui permet de se cacher lors du défilement:
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
}
}
Utiliser isActive
ne fait pas ce que je voulais, la barre de défilement est active (affiche le bouton Annuler, etc.), alors que tout ce que je veux, c’est pour qu’elle soit visible.
Vous pouvez définir la propriété isActive
sur true
après avoir ajouté le searchController à la commande navigationItem
.
Juste comme ça:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
searchController.isActive = true
}
Les éléments suivants font de searchBar le statut de premier répondant:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
DispatchQueue.main.async {
self.searchController.searchBar.becomeFirstResponder()
}
}