Barra de alcance de fuerza debajo de UISearchbar
-
25-09-2019 - |
Pregunta
Tengo un UISearchbar y UisearchDisplayController, todo funciona muy bien, pero mi selector de alcance se muestra junto al campo de texto en lugar de debajo de él. Sé que esta es la acción esperada cuando el dispositivo está en el paisaje, pero dado que tengo el Uisearchbar en la vista maestra de un UISPLITVIEWController, termina luciendo así:
¿Hay alguna forma de obligar a la barra de alcance a mostrar debajo del campo de texto en todas las orientaciones de la interfaz (sé que esto funciona bien en el correo. asi que)
Solución
Esto no es parte de la API pública. Esperemos que se agregue en el futuro. Se puede lograr utilizando API privadas, mirar a través de un volcado de clase UIKIT lo ayudará allí.
¡Buena suerte!
Editar: Tenga en cuenta que el uso de API privadas puede rechazarlo de la App Store, como la mayoría de la gente ya sabe.
Otros consejos
Usé el UISearchDisplayDelegate para mostrar y ocultar la barra de alcance.
-(void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
{
[controller.searchBar setShowsScopeBar:YES];
}
-(void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller
{
[controller.searchBar setShowsScopeBar:NO];
}
No use API privadas. En su lugar, siga la recomendación de Apple de las pautas de la interfaz de usuario de iOS:
Cuando está presente una barra de búsqueda, puede aparecer una barra de alcance cerca de ella. La barra de alcance se muestra debajo de la barra de búsqueda, independientemente de la orientación, a menos que use un controlador de visualización de búsqueda en su código (para obtener más información sobre la forma en que esto funciona, consulte la referencia de la clase UISearchDisplayController). Cuando usa un controlador de visualización de búsqueda, la barra de alcance se muestra dentro de la barra de búsqueda a la derecha del campo de búsqueda cuando el dispositivo está en orientación del paisaje (en orientación del retrato, está debajo de la barra de búsqueda).
Esto funcionó para mí usando guiones gráficos.
Why not just set up your search bar programattically? Here's what I'm using on my current project. It hides the search bar until the user scrolls up, and the scope bar is loaded below the text field when they start typing items. From there just filter as usual:
- (void)setupSearchBar {
self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)];
self.searchBar.showsScopeBar = YES;
self.searchBar.scopeButtonTitles = [NSArray arrayWithObjects:@"Users", @"Groups", nil];
self.tableView.tableHeaderView = self.searchBar;
CGPoint offset = CGPointMake(0, self.searchBar.frame.size.height);
self.tableView.contentOffset = offset;
self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar
contentsController:self];
self.searchController.searchResultsDataSource = self;
self.searchController.searchResultsDelegate = self;
self.searchController.delegate = self;
}
call [self setupSearchBar];
in viewDidLoad you're off to the races.