Estoy adjuntando un UISearchController a la navigationItem.searchControllerpropiedad 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 hidesSearchBarWhenScrollingde 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



hidesSearchBarWhenScrollingfirstResponder?scrollView.setContentOffset(_:animated). ¿Alguien tiene una sugerencia?hidesSearchBarWhenScrolling = falsecoloca 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
isActiveno 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
viewDidLoadlugar deviewWillAppearsearchController.searchBar.isHidden = falseen viewDidLoad no? Esto último me parece mucho más lógicoPuede establecer la propiedad
isActiveentruedespués de agregar el controlador de búsqueda anavigationItem.Así:
override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) searchController.isActive = true }fuente
isActivees 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