tutorial searchcontroller example custom bar ios objective-c uitableview uisearchbar uisearchcontroller

ios - example - UISearchController searchBar en la tablaHeaderView animando fuera de la pantalla



searchcontroller tutorial (8)

¿Has intentado establecer el hideNavigationBarDuringPresentation en falso? Resolvió mi dolor de cabeza ...

self.searchController.hidesNavigationBarDuringPresentation = false;

Poner la barra de búsqueda en la barra de navegación da una experiencia de usuario más sólida en mi opinión (para el iphone)

self.navigationItem.titleView = self.searchController.searchBar;

Tengo un UISearchController con un UITableViewController como UITableViewController , el UISearchBar de este searchController está configurado para estar en el tableHeaderView de mi tableView actual que se muestra en mi raíz ViewController. Casi todo está funcionando bien, como se esperaba. Pero en la animación de UISearchBar (cuando UISearchBar clic en searchBar y UINavigationBar oculta y la barra de búsqueda va hacia arriba, como en UISearchDisplayController ) tengo un comportamiento extraño. En lugar de moverse a la posición de UINavigationBar (y: 0), salta de la pantalla y comienza la animación que muestra el botón cancelar. Traté de mover mi código de instancia a viewDidLoad lugar de init , y las cosas son las mismas. Creo que el centro del problema está en el marco de la vista searchResultsController , pero no estoy seguro de eso (intenté establecer el marco, sin éxito). Todo lo que hago es en código puro.

Aquí está la parte relevante del código:

- (void) viewDidLoad { [super viewDidLoad]; // search controller setup self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchResultsController]; self.searchController.delegate = self; self.searchController.searchResultsUpdater = self; self.searchController.searchBar.delegate = self; [self.searchController.searchBar sizeToFit]; self.tableView.tableHeaderView = self.searchController.searchBar; self.searchController.definesPresentationContext = YES; }

Y tengo una carga searchResultsController para searchResultsController :

- (UITableViewController *)searchResultsController { if (_searchResultsController == nil) { _searchResultsController = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain]; _searchResultsController.tableView.delegate = self; _searchResultsController.tableView.dataSource = self; } return _searchResultsController; }

He descargado el código de ejemplo de apple, pero usan storyBoards y un xib para UITableViewCell, SearchController funciona perfectamente en el proyecto. ¿Alguien tiene el mismo problema? ¿Cómo puedo arreglar esto? Cualquier solución o sugerencia sería apreciada.

Gracias por la atención.


Añadir

self.extendedLayoutIncludesOpaqueBars = YES;

en el método viewDidLoad


En Swift, prueba:

override func viewDidLoad() { edgesForExtendedLayout = [] searchController.hidesNavigationBarDuringPresentation = false // ... }


En mi caso, searchBar estaba en la tabla HeaderView y no había NavigationBar en la pantalla. Pero SearchBar sigue animando hacia arriba superponiéndose a la barra de estado cuando se activa. La solución para evitar esto fue establecer:

searchController.hidesNavigationBarDuringPresentation = false

Lo cual es extraño porque como dije, el controlador de vista no estaba usando una barra de navegación.


Noté que UISearchController funciona perfectamente en uno de mis puntos de vista, pero no en el otro. El problema fue con UITableViewController y no con UIViewController. Si cambia a un UIViewController con una UITableView dentro y correctamente restringido, no hay problemas. Implementé el mío con un XIB y funcionó perfectamente.


Para aclarar esto, la respuesta de Lorenzo funcionó para mí.

self.definesPresentationContext = YES;


Probar esto:

Primero necesitas delegar el

UISearchControllerDelegate

Para Swift

func willPresentSearchController(searchController: UISearchController) { self.navigationController?.navigationBar.translucent = true } func willDismissSearchController(searchController: UISearchController) { self.navigationController?.navigationBar.translucent = false }


SWIFT 3.01

func willPresentSearchController(searchController: UISearchController){ self.navigationController?.navigationBar.isTranslucent = true } func willDismissSearchController(searchController: UISearchController) { self.navigationController?.navigationBar.isTranslucent = false }