想去掉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不会被阴影覆盖.