ubicacion - Mostrar barra de búsqueda en la barra de navegación sin desplazarse en iOS 11
navegacion privada safari iphone (3)
Adjunto un UISearchController a la propiedad
navigationItem.searchController
de un UITableViewController en iOS 11. Esto funciona bien: puedo usar la agradable barra de búsqueda de estilo 11 de iOS.
Sin embargo, me gustaría hacer que la barra de búsqueda sea visible en el lanzamiento. Por defecto, el usuario tiene que desplazarse hacia arriba en la vista de tabla para ver la barra de búsqueda. ¿Alguien sabe cómo es esto posible?
Izquierda: situación predeterminada después del lanzamiento. Derecha: barra de búsqueda visible (al desplazarse hacia arriba). Me gustaría tener la barra de búsqueda visible después del lanzamiento, como en la captura de pantalla correcta.
Ya descubrí que la barra de búsqueda se puede hacer visible estableciendo la propiedad
hidesSearchBarWhenScrolling
de mi elemento de navegación en falso.
Sin embargo, esto hace que la barra de búsqueda esté siempre visible, incluso cuando se desplaza hacia abajo, lo cual no es lo que quiero.
Lo siguiente hace que la barra de desplazamiento sea visible al principio, luego le permite ocultarse al desplazarse:
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
}
}
Usar
isActive
no hizo lo que quería, activa la barra de desplazamiento (mostrando el botón cancelar, etc.), cuando todo lo que quiero es que sea visible.
Lo siguiente hace que searchBar se convierta en el primer respondedor:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
DispatchQueue.main.async {
self.searchController.searchBar.becomeFirstResponder()
}
}
Puede establecer la propiedad
isActive
en
true
después de agregar searchController al
navigationItem
.
Solo así:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
searchController.isActive = true
}