example custom bar and ios uinavigationcontroller ios8 uisearchbar uisearchcontroller

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 searchBar en 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 searchBar y el scopeBar hacia 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 searchBar de searchBar permanezca 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 el scopeBar y 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 searchBar y scopeBar , probablemente tendrá que scopeBar usando el scopeBar y reemplazarlo con un UISegmentedControl que 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?