iOS学习篇之更改UISearchBar的背景为透明

输入相关关键字在百度中能搜索出来很多,但是都不靠谱,于是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];

 

你可能感兴趣的:(search)