La frontière ne semble pas changer très bien avec la couleur de teinte, donc mon concepteur a insisté pour que nous le changer. C'est aussi simple que d'ajouter une vue 1px au bas de votre barre de recherche:
Maintenant dans viewDidLoad, je crée une vue 1px et la positionne tout en bas de notre barre de recherche.
#define SEARCHBAR_BORDER_TAG 1337
- (void) viewDidLoad{
// Set a custom border on the bottom of the search bar, so it's not so harsh
UISearchBar *searchBar = self.searchDisplayController.searchBar;
UIView *bottomBorder = [[UIView alloc] initWithFrame:CGRectMake(0,searchBar.frame.size.height-1,searchBar.frame.size.width, 1)];
[bottomBorder setBackgroundColor:[UIColor colorWithWhite:200.0f/255.f alpha:1.0f]];
[bottomBorder setOpaque:YES];
[bottomBorder setTag:SEARCHBAR_BORDER_TAG];
[searchBar addSubview:bottomBorder];
[bottomBorder release];
}
Maintenant, je transition aussi la couleur de teinte aux paramètres par défaut lorsque l'utilisateur est en fait la recherche, parce que teinter la barre de recherche Teintes également la couleur du bouton annuler à une couleur laide. Si vous faites quelque chose de similaire, le code ci-dessous cacher/montrer votre frontière pour chaque état:
- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller{
[controller.searchBar setTintColor:nil];
// Hide our custom border
[[controller.searchBar viewWithTag:SEARCHBAR_BORDER_TAG] setHidden:YES];
}
- (void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller{
[controller.searchBar setTintColor:[UIColor colorWithRed:238.0f/255.0f green:245.0f/255.0f blue:248.0f/255.0f alpha:1.0f]];
//Show our custom border again
[[controller.searchBar viewWithTag:SEARCHBAR_BORDER_TAG] setHidden:NO];
}
Belle technique mais malheureusement, c'est la bordure supérieure qui cause le problème pour moi, qui est en fait en dehors des limites de l'UISearchBar et ne peut pas être couverte par une sous-vue comme celle-ci. – prendio2