custom - ¿Cómo uso UISearchController en iOS 8 donde UISearchBar está en mi barra de navegación y tiene botones de alcance?
search bar swift 4 example (1)
Te encuentras con un "problema de diseño" donde se espera que el scopeBar esté oculto cuando searchController no está activo.
Los botones de la barra de alcance aparecen detrás (debajo) de la barra de búsqueda, ya que esa es su ubicación cuando la barra de búsqueda se activa y se anima en la barra de navegación.
Cuando la búsqueda no está activa, una barra de alcance visible ocupará espacio en la pantalla, distraerá el contenido y confundirá al usuario (ya que los botones de alcance no tienen resultados para filtrar).
Dado que su searchBar ya se encuentra en titleView, la animación de barra (de navegación y búsqueda) que revela la barra de alcance no se produce.
- La opción más fácil es ubicar la barra de búsqueda debajo de la barra de navegación, y dejar que la barra de búsqueda se
searchBaren el área del título. La barra de navegación animará su altura, dejando espacio para incluir la barra de alcance que estaba oculta. Todo esto será manejado por el controlador de búsqueda. La segunda opción, casi tan fácil, es utilizar un ícono de botón de la barra de búsqueda , que animará la
searchBary elscopeBarhacia abajo a la vista sobre la barra de navegación.- (IBAction)searchButtonClicked:(UIBarButtonItem *)__unused sender { self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; self.searchController.searchResultsUpdater = self; self.searchController.hidesNavigationBarDuringPresentation = NO; self.searchController.dimsBackgroundDuringPresentation = NO; self.definesPresentationContext = YES; self.searchController.searchBar.scopeButtonTitles = @[@"Posts", @"Users", @"Subreddits"]; [self presentViewController:self.searchController animated:YES completion:nil]; }Si desea que la
searchBardesearchBarpermanezca en titleView, no se incluye una animación para hacer lo que desea. Deberá desplegar su propio código para manejar el cambio de altura de la barra de navegación y mostrar su propia barra de alcance (o enganchar en el interior) y animar elscopeBary hacia la vista).Si es afortunado, alguien más ha escrito el código
willPresentSearchController:para manejar la transición que desea.Si desea ver siempre una
searchBaryscopeBar, probablemente tendrá quescopeBarusando elscopeBary reemplazarlo con unUISegmentedControlque el usuario siempre verá, incluso cuando el controlador de búsqueda no esté activo.
Actualizar:
Esta respuesta sugirió la subclasificación de UISearchController para cambiar la altura de la barra de búsqueda.
UISearchController utilizar el nuevo UISearchController de iOS 8 e incrustar su UISearchBar en mi UINavigationBar . Eso se hace fácilmente de la siguiente manera:
searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.delegate = self
searchController.searchBar.delegate = self
searchController.dimsBackgroundDuringPresentation = false
searchController.hidesNavigationBarDuringPresentation = false
navigationItem.titleView = searchController.searchBar
Pero cuando agrego los botones de alcance:
searchController.searchBar.showsScopeBar = true
searchController.searchBar.scopeButtonTitles = ["Posts, Users, Subreddits"]
Agrega los botones detrás de UISearchBar y obviamente se ve muy extraño.
¿Cómo debería estar haciendo esto?