zoukankan      html  css  js  c++  java
  • 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];
  • 相关阅读:
    中文知识图谱-基于规则的关系抽取-领域词抽取
    数据挖掘trick 特征编码
    何构建强大的baseline?万能的4种标注框架供你选择!
    工业界如何解决NER问题?12个trick,与你分享~
    开源的模式匹配工具-基于AC自动机的pyahocorasick、Acora、esmre
    Pooling 选择的策略
    自然语言处理-条件随机场CRF全链路解读
    python DES 加密
    怎么解决 ? null, message from server: "Host '***.***.***.***' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"
    Flutter混合开发 怎么开启热更新?
  • 原文地址:https://www.cnblogs.com/emmet7life/p/4648383.html
Copyright © 2011-2022 走看看