UISearchBar 背景图-举一反三

本文介绍了如何自定义UISearchBar的背景图、ScopeBar的背景色以及右侧按钮的颜色。通过遍历subviews并设置相应属性,实现了搜索栏风格的统一调整。同时,针对UISearchBar获取焦点后上移的问题,提出了通过调整frame来避免遮挡导航控制器的方法,但这种方法在焦点切换时需要不断调整frame。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想去掉UISearchBar的背景图,网上很多文章都介绍:

UISearchBar *mSearchBar;

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

            }



如果想改变ScopeBar的背景图呢?

先把mSearhBar的subviews数组打印出来:
<__NSArrayM 0x800fe60>(
<UISegmentedControl: 0x8096120; frame = (0 0; 320 44); opaque = NO; layer = <CALayer: 0x80961f0>>,
<UISearchBarBackground: 0x8095db0; frame = (0 0; 320 44); userInteractionEnabled = NO; layer = <CALayer: 0x8095e40>>,
<UISearchBarTextField: 0x8093520; frame = (5 6; 310 31); text = ''; clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x808e3e0>>,
<UINavigationButton: 0x8010dd0; frame = (0 0; 48 30); opaque = NO; layer = <CALayer: 0x8010d40>>
)

现在很明了了.

改变ScopeBar背景色:

if ([subview isKindOfClass:NSClassFromString(@"UISegmentedControl")])
        {
            UISegmentedControl *_control = (UISegmentedControl *)subview;
            _control.tintColor = [UIColor grayColor];
           
        }

改变uisearchbar背景色,不是remove它:

if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")])
        {
             mSearchBar.tintColor = [UIColor grayColor];
        }


如果想改变searchbar右侧的button的话:

for (id tclass in [searchBar subviews])
    {
        if ([tclass isKindOfClass:[UIButton class]])
        {
            UIButton *btn=(UIButton *)tclass;
            btn.tintColor = [UIColor grayColor];
            [btn setTitle:NSLocalizedString(@"Cancel", nil) forState:UIControlStateNormal];//此处为设置button text
        }
    }

ok,运行结果,success~

无焦点:


有焦点:



ps:uisearchbar获得焦点后,往往 会上移,覆盖navigationController(不管是不是自身app的navigationController).

怎么不让uisearchbar上移呢?

解决方法:uisearchbar,无焦点时,frame为1;有焦点时,再设一次frame,为2.去掉焦点后frame返回1.

2和1相比,2比1高度大一些,为ScopeBar的高度.

不足之处:焦点变化时,都要重设uisearchbar的frame;

   uisearchbar下面的同级view不会被阴影覆盖.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值