Estoy adjuntando un UISearchController a la navigationItem.searchController
propiedad de un UITableViewController en iOS 11. Esto funciona bien: puedo usar la bonita barra de búsqueda estilo iOS 11.
Sin embargo, me gustaría que la barra de búsqueda sea visible en el lanzamiento. De forma predeterminada, 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 (desplazándose hacia arriba). Me gustaría tener la barra de búsqueda visible después del lanzamiento, como en la captura de pantalla de la derecha.
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, que no es lo que quiero.
fuente
hidesSearchBarWhenScrolling
firstResponder
?scrollView.setContentOffset(_:animated)
. ¿Alguien tiene una sugerencia?hidesSearchBarWhenScrolling = false
coloca la barra de búsqueda sobre un título grande en iOS 13. ¿Alguna idea de si puedo actualizar esto de alguna manera?Respuestas:
Lo siguiente hace que la barra de búsqueda sea visible al principio, luego permite que se oculte 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 } }
El uso
isActive
no hizo lo que quería, activa la barra de búsqueda (mostrando el botón de cancelar, etc.), cuando todo lo que quiero es que sea visible.fuente
viewDidLoad
lugar deviewWillAppear
searchController.searchBar.isHidden = false
en viewDidLoad no? Esto último me parece mucho más lógicoPuede establecer la propiedad
isActive
entrue
después de agregar el controlador de búsqueda anavigationItem
.Así:
override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) searchController.isActive = true }
fuente
isActive
es un booleano de solo lectura. En su lugar, querrá usarsearchController.active = true
.Para mí funcionó después de agregar las siguientes líneas en el
viewDidLoad()
método:navigationController?.navigationBar.prefersLargeTitles = true navigationController!.navigationBar.sizeToFit()
fuente
En iOS 13, la respuesta de @Jordan Wood no funcionó. En cambio lo hice:
override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) UIView.performWithoutAnimation { searchController.isActive = true searchController.isActive = false } }
fuente