输入相关关键字在百度中能搜索出来很多,但是都不靠谱,于是Google了一下,在StackOverFlow中找到一个蛮靠谱的方法,试了可行。
with iOS8 sdks apple moved @"UISearchBarBackground" view one level deeper, so have will need to look at subviews of the child-views as bellow,.
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
耶!
接下来,我又发现一位博主分享的文章,写的很详细,而且解决方案看起来会更加优雅,不像上面给的那样暴力粗鲁。^_^
文章在这里。
这里贴出代码:
- (void)viewDidLoad { [super viewDidLoad]; // 1 UIImage* clearImg = [CDViewController imageWithColor:[UIColor clearColor] andHeight:32.0f]; // 2 [_searchBar setBackgroundImage:clearImg]; // 3 [_searchBar setSearchFieldBackgroundImage:clearImg forState:UIControlStateNormal]; // 4 [_searchBar setBackgroundColor:[UIColor clearColor]]; } + (UIImage*) imageWithColor:(UIColor*)color andHeight:(CGFloat)height { CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, height); UIGraphicsBeginImageContext(rect.size); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [color CGColor]); CGContextFillRect(context, rect); UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; }
修改APP内全局UISearchBar样式:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { UIColor* myColor = [UIColor colorWithRed:0 green:0.48 blue:1 alpha:1]; // set your desired background color here UIImage* clearImg = [CDViewController imageWithColor:[UIColor clearColor] andHeight:1.0f]; UIImage* coloredImg = [CDViewController imageWithColor:myColor andHeight:32.0f]; [[UISearchBar appearance] setBackgroundColor:[UIColor clearColor]]; [[UISearchBar appearance] setBackgroundImage:clearImg]; [[UISearchBar appearance] setSearchFieldBackgroundImage:coloredImg forState:UIControlStateNormal]; return YES; }
给ScopeBar设置透明背景:
UIImage* clearImg = [CDViewController imageWithColor:[UIColor clearColor] andHeight:1.0f]; [_searchBar setScopeButtonTitles:nil]; [_searchBar setScopeBarBackgroundImage:clearImg]; [_searchBar setScopeBarButtonBackgroundImage:clearImg forState:UIControlStateNormal]; [_searchBar setScopeBarButtonDividerImage:clearImg forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal];