UISearchBar:清除背景颜色或设置背景图像
如何设置背景图像,或清除search栏的背景,如笔记应用程序?
我刚想出了一个很好的解决scheme。 您必须重写UISearchBar,然后隐藏Background和Segment Control层。 然后画出背景。
@ .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
希望这可以帮助!
面向未来的方式:
[searchBar setBackgroundImage:[UIImage new]]; [searchBar setTranslucent:YES];
mj_有我使用的答案。 我只是要评论,但我还不能。 所以我只是张贴我自己的答案与我的实施,我用一个半透明的BG添加一个search栏到表视图的顶部。
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; } }
我遇到了上述问题。 我用了以下。
for (UIView *subview in searchBar.subviews) { if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) { [subview removeFromSuperview]; break; } }
这对我来说(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; } } }
这里有两个问题:
1.UISearchBar清晰的背景色:
在这里看到我的答案
2.设置背景图解决scheme:( 如果你在iOS 5.0 + )
[[UISearchBar appearance]setSearchFieldBackgroundImage:[navBarGradImage resizableImageWithCapInsets:inset2] forState:UIControlStateNormal];
注意:您也可以尝试使用透明图像作为背景。
希望这可以帮助。
如何在UISearchBar中设置背景颜色:
#import <QuartzCore/QuartzCore.h>
然后build立一个出口连接到search栏(比如说objSearchbar
),并使用这些行:
for (UIView *subview in self.objSearchbar.subviews) { if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) { [subview removeFromSuperview]; break; } } self.tweetSearchbar.layer.backgroundColor = [UIColor blueColor].CGColor;
我更喜欢只设置为0,所以你可以隐藏/显示需求。
// Hide [[self.theSearchBar.subviews objectAtIndex:0] setAlpha:0.0]; // Show [[self.theSearchBar.subviews objectAtIndex:0] setAlpha:1.0];
searchBar.searchBarStyle = UISearchBarStyleMinimal;
看这里: UISearchbar背景图像的变化
设置背景图像
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];
随着iOS8 SDK苹果移动@“UISearchBarBackground”视图更深一层,所以有必要看看子视图的子视图如下,
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
一个class轮:
[[self.theSearchBar.subviews objectAtIndex:0] removeFromSuperview];