4

J'ai un UISearchBar ajouté comme en-tête de tableau avec le code suivant. Puis, j'ai défini UISearchDisplayController comme suit.Est-il possible de changer la couleur de la bordure d'une barre de recherche d'UISearchDisplayController?

searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self]; 
[searchDisplayController setDelegate:self]; 
[searchDisplayController setSearchResultsDataSource:self]; 

Tout fonctionne comme je le voudrais, sauf que le UISearchDisplayController a ajouté une bordure bleu (ish) au-dessus de la barre de recherche - ce bar ne reconnaît pas le tintColor j'ai mis sur la barre de recherche.

Est-il possible de changer la couleur de cette barre? Ce n'est évidemment pas absolument crucial mais cette ligne va m'embêter pour toujours si elle reste bleue comme ça!

zoomed in on UISearchBar http://nikonizer.yfrog.com/Himg256/scaled.php?tn=0&server=256&filename=4y9.png&xsize=640&ysize=640

Répondre

3

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]; 
} 
+0

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

0

Essayez ceci:

searchBar.clipsToBounds = YES; 

question originale link

1

searchBar.searchBarStyle = UISearchBarStyleMinimal;

Questions connexes