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í:

UISearchBar problem

¿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)

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top