UISearchBar: color de background claro o image de background configurada

¿Cómo puede configurar la image de background, o borrar el background, de una barra de búsqueda, como la aplicación de notas?

Acabo de encontrar una solución que funciona muy bien. Tienes que anular el UISearchBar y luego esconder tanto las capas de background como de control de segmentos. Luego dibuja el background.

@ .m

#import "UISearchBar.h" #import <QuartzCore/QuartzCore.h> @implementation UISearchBar(CustomBackground) - (id)init { for ( UIView * subview in self.subviews ) { if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground") ] ) subview.alpha = 0.0; if ([subview isKindOfClass:NSClassFromString(@"UISegmentedControl") ] ) subview.alpha = 0.0; } return self; } + (UIImage *) bgImagePortrait { static UIImage *image = nil; if (image == nil) image = [[UIImage imageNamed:@"UISearchBarBack.png"] retain ]; return image; } + (UIImage *) bgImageLandscape { static UIImage *image = nil; if (image == nil) image = [[UIImage imageNamed:@"UISearchBarBack.png"] retain]; return image; } - (void) drawLayer:(CALayer *)layer inContext:(CGContextRef)contenxt { if ([self isMemberOfClass:[UISearchBar class]] == NO) return; UIImage * image = ( self.frame.size.width > 320 ) ? [UISearchBar bgImageLandscape ] : [UISearchBar bgImagePortrait ]; for ( UIView * subview in self.subviews ) { if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground") ] ) subview.alpha = 0.0; if ([subview isKindOfClass:NSClassFromString(@"UISegmentedControl") ] ) subview.alpha = 0.0; } CGContextTranslateCTM( contenxt , 0 , image.size.height ); CGContextScaleCTM( contenxt, 1.0, -1.0 ); CGContextDrawImage( contenxt , CGRectMake( 0 , 0 , image.size.width , image.size.height ), image.CGImage ); } @end 

@ .h

 #import <Foundation/Foundation.h> #import <QuartzCore/QuartzCore.h> @interface UISearchBar(CustomBackground) @end 

¡Espero que esto ayude!

Una forma a testing de futuro:

 [searchBar setBackgroundImage:[UIImage new]]; [searchBar setTranslucent:YES]; 

mj_ ​​tiene la respuesta que he usado. Solo iba a comentar como tal pero todavía no puedo. Así que publicaré mi propia respuesta con mi implementación donde agregué una barra de búsqueda a la parte superior de una vista de tabla con un BG semitransparente.

 DLog(@" Add search bar to table view"); //could be a UIImageView to display an image..? bg = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 45)] autorelease]; bg.backgroundColor = [UIColor blackColor]; UISearchBar *sb = [[[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, 290, 45)] autorelease]; sb.barStyle = UIBarStyleBlackTranslucent; sb.showsCancelButton = NO; sb.autocorrectionType = UITextAutocorrectionTypeNo; sb.autocapitalizationType = UITextAutocapitalizationTypeNone; sb.delegate = self; [bg addSubview:sb]; table.tableHeaderView = bg; for (UIView *subview in sb.subviews) { if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) { [subview removeFromSuperview]; break; } } 

Tuve problemas con la respuesta anterior. Utilicé lo siguiente.

 for (UIView *subview in searchBar.subviews) { if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) { [subview removeFromSuperview]; break; } } 

Esto funcionó para mí (ios4.2 +)

 // Change the search bar background -(void)viewWillAppear:(BOOL)animated { for (UIView *subview in self.searchBar.subviews) { if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) { UIView *bg = [[UIView alloc] initWithFrame:subview.frame]; bg.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"search_bar_bg"]]; [self.searchBar insertSubview:bg aboveSubview:subview]; [subview removeFromSuperview]; break; } } } 

Tienes dos preguntas aquí:
1.UISearchBar color de background claro:
Mira mi respuesta aquí

2. Configurar la solución de image de background 🙁 Si está en iOS 5.0 + )

 [[UISearchBar appearance]setSearchFieldBackgroundImage:[navBarGradImage resizableImageWithCapInsets:inset2] forState:UIControlStateNormal]; 

NOTA: también puede intentar usar una image transparente como background.

Espero que esto ayude.

Cómo configurar el color de background en UISearchBar:

 #import <QuartzCore/QuartzCore.h> 

Luego haga una connection de salida a la barra de búsqueda (por ejemplo, objSearchbar ), y use estas líneas:

 for (UIView *subview in self.objSearchbar.subviews) { if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) { [subview removeFromSuperview]; break; } } self.tweetSearchbar.layer.backgroundColor = [UIColor blueColor].CGColor; 

Prefiero simplemente establecer el alfa a 0 para que pueda ocultar / mostrar cuando se lo solicite.

 // Hide [[self.theSearchBar.subviews objectAtIndex:0] setAlpha:0.0]; // Show [[self.theSearchBar.subviews objectAtIndex:0] setAlpha:1.0]; 

searchBar.searchBarStyle = UISearchBarStyleMinimal;

Mire aquí: cambio de image de background UISearchbar

Establecer image de background

  UIImageView *backgroundView = [[UIImageView alloc] initWithFrame:searchBar.bounds]; backgroundView.image = [UIImage imageNamed:@"xxxx.png"]; [searchBar insertSubview:backgroundView atIndex:1]; // at index 1 but not 0 [backgroundView release]; 

con iOS8 sdks, apple se movió en @ "UISearchBarBackground", ve un nivel más profundo, por lo que tendrás que mirar las subvistas de las vistas secundarias como a continuación,

 for (UIView *subview in searchBar.subviews) { for(UIView* grandSonView in subview.subviews){ if ([grandSonView isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) { grandSonView.alpha = 0.0f; }else if([grandSonView isKindOfClass:NSClassFromString(@"UISearchBarTextField")] ){ NSLog(@"Keep textfiedld bkg color"); }else{ grandSonView.alpha = 0.0f; } }//for cacheViews }//subviews 

Un trazador de líneas:

 [[self.theSearchBar.subviews objectAtIndex:0] removeFromSuperview];