2011-06-01 67 views
38

Quiero personalizar la barra de búsqueda, me refiero a la caja blanca. ¿Puedo hacerlo? ¿Hay alguna documentación sobre eso? ¿Hay alguna manera de ocultar la caja blanca, pero no las letras? ¿Al menos puedo hacer que la caja sea más pequeña? Me refiero a menor alturaCómo personalizar la apariencia de UISearchBar

Respuesta

56

By IOS 5.0 que tienen la oportunidad de utilizar

[[UISearchBar appearance] setSearchFieldBackgroundImage:[UIImage imageNamed:@"searchbar.png"]forState:UIControlStateNormal]; 
+0

¿Podemos cambiar su altura? –

+0

Asignar una imagen de fondo con la altura deseada, debería cambiarla –

+0

Gracias @Ilker Baltaci, ya probé, se mantiene a la altura original –

29

Aquí está la solución que estaba buscando: subclases de una UISearchBar, & sobrescribir los layoutSubviews método

- (void)layoutSubviews { 
    UITextField *searchField; 
    NSUInteger numViews = [self.subviews count]; 
    for(int i = 0; i < numViews; i++) { 
     if([[self.subviews objectAtIndex:i] isKindOfClass:[UITextField class]]) { //conform? 
     searchField = [self.subviews objectAtIndex:i]; 
     } 
    } 
    if(!(searchField == nil)) { 
     searchField.textColor = [UIColor whiteColor]; 
     [searchField setBackground: [UIImage imageNamed:@"buscador.png"] ]; 
     [searchField setBorderStyle:UITextBorderStyleNone]; 
    } 

    [super layoutSubviews]; 
} 
+0

@Jhaliya, ¿Dónde debo poner esta parte del código para obtener fondo personalizado para la barra de búsqueda? – chatur

1

Todavía no pocos intentos por ahí, incluyendo subclase UISearchBar y piratear es layoutSubviews o drawLayer:. Después de iOS 5, el mejor método es usar UIAppearance.

// Configure your images 
UIImage *backgroundImage = [UIImage imageNamed:@"searchbar"]; 
UIImage *searchFieldImage = [[UIImage imageNamed:@"searchfield"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 5)]; 

// Set it to your UISearchBar appearance 
[[UISearchBar appearance] setBackgroundImage:backgroundImage]; 
[[UISearchBar appearance] setSearchFieldBackgroundImage:searchFieldImage forState:UIControlStateNormal]; 
1

usar el siguiente código a transparente su barra de búsqueda

// Set it to your UISearchBar appearance 

[[UISearchBar appearance] setBackgroundColor:[UIColor clearColor]]; 
[[UISearchBar appearance] setBackgroundImage:backgroundImage]; 
[[UISearchBar appearance] setSearchFieldBackgroundImage:searchFieldImage 
               forState:UIControlStateNormal]; 
14
// Search Bar Customization 
// Background Image 
[self.searchDisplayController.searchBar setBackgroundImage:[[UIImage alloc]init]]; 

// Backgroud Color 
[self.searchDisplayController.searchBar setBackgroundColor:[UIColor redColor]]; 

// Search Bar Cancel Button Color 
[[UIBarButtonItem appearanceWhenContainedIn: [UISearchBar class], nil] setTintColor:[UIColor whiteColor]]; 

// set Search Bar Search icon 
[self.searchDisplayController.searchBar setImage:[UIImage imageNamed:@"search_ico.png"] 
           forSearchBarIcon:UISearchBarIconSearch 
              state:UIControlStateNormal]; 

// set Search Bar textfield background image 
[[UISearchBar appearance] setSearchFieldBackgroundImage:[UIImage imageNamed:@"search_box.png"] 
               forState:UIControlStateNormal]; 

// set Search Bar texfield corder radius 
UITextField *txfSearchField = [self.searchDisplayController.searchBar valueForKey:@"_searchField"]; 
txfSearchField.layer.cornerRadius = 10.8f; 
8

Aquí está algunas propiedades comunes que se pueden cambiar para personalizar UISearchBar: enter image description here

0

Algunos ejemplos de Swift

UITextField.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).defaultTextAttributes = [NSForegroundColorAttributeName : UIColor.whiteColor()] 
     UITextField.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).attributedPlaceholder = NSAttributedString(string: "", attributes: [NSForegroundColorAttributeName : UIColor.whiteColor()]) 
     UITextField.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).tintColor = UIColor.whiteColor() 

    UISearchBar.appearance().setImage(UIImage(named: "searchBarSearchIcon"), forSearchBarIcon: UISearchBarIcon.Search, state: UIControlState.Normal) 
     UISearchBar.appearance().setImage(UIImage(), forSearchBarIcon: UISearchBarIcon.Clear, state: UIControlState.Normal) 
Cuestiones relacionadas