2014-01-08 38 views
15

我不能清除搜索栏我试图弄清楚通过设置其背景颜色清晰,我也划归搜索栏一个图像制作的UISearchBar背景清晰

我也让搜索栏

的背景清晰
for (UIView *subview in self.searchBarHome.subviews) { 
     if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) { 
     [subview removeFromSuperview];//please help me to make clear background of uisearchbar 
     break; 
    } 
} 
[self.searchBarHome setBackgroundColor:[UIColor clearColor]]; 
+0

你继承的搜索栏? – ldindu

+0

请山帮我解决这个问题 – Vikram

+0

@idindu不,我没有我只是想删除uisearchbar的浅灰色背景 – Vikram

回答

26

对于iOS7 +的地方,所有你需要做的是:

[self.searchBarHome setBackgroundColor:[UIColor clearColor]]; 
[self.searchBarHome setBarTintColor:[UIColor clearColor]]; //this is what you want 

注意:这不会对iOS6的


对于iOS6的工作+ ,即使在iOS7中也会照顾它:

[self.searchBarHome setBackgroundColor:[UIColor clearColor]]; 
[self.searchBarHome setBackgroundImage:[UIImage new]]; 
[self.searchBarHome setTranslucent:YES]; 
+0

thnk u这么多的这篇文章...有什么办法可以用于iOS6吗? – Vikram

+0

@Vikram:是的,有一种方法(_indirect方式_)...检查更新的答案 – staticVoidMan

+0

thnks你先生这个解决方案 – Vikram

1
子类

所述的UISearchBar并重写initWithFrame和的initWithCoder方法和背景颜色设置为

// For searchbar created programmatically 
- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     [self configureSetup]; 
    } 
    return self; 
} 

// For search bar created on xib 
- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self configureSetup]; 
    } 
    return self; 
} 

- (void)configureSetup 
{ 
    self.backgroundColor = [UIColor clearColor]; 
} 

,并使用子类searchba中的R,而不是在那里你指定的UISearchBar

14

UISearchBar包含两个子视图,它们是'UISearchBarBackground'和'UITextField'。在IOS8中,你需要删除'UISearchBarBackground'来清除它。

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

我必须将这个和其他答案组合起来才能使它完全工作,但这是一个很好的起点。 –

9

卸下UISearchBarBackground可能会导致不可知的行为特别是如果你开始使用该元素进行更先进的方式。

Ruozi的回答是我的首选抓住UISearchBarBackground元素不过,我想阿尔法建议设置为0,而不是删除该视图的解决方案如下:

for (UIView *subview in [[self.searchBar.subviews lastObject] subviews]) { 
    if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) { 
     [subview setAlpha:0.0]; 
     break; 
    } 
} 

上面的代码添加到包含您的UIViewController子类一个IBOutlet * searchBar。这段代码将为iOS8和iOS9带来透明背景。

另外,为了避免混乱你的viewController,在你的UISearchBar子类中包含这些代码可能会更好。

3

设置backgroundColor和barTintColor在iOS 9+中不起作用,给我留下了黑色背景。但若子解决方案将工作。这是一个相同代码的快速版本。

for view in _searchBar.subviews.last!.subviews { 
    if view.isKindOfClass(NSClassFromString("UISearchBarBackground")!) { 
     view.removeFromSuperview() 
    } 
} 
+0

设置一个清晰的背景也不适用于我。尽管这个解决方案有效下面是一个建议:我将代码粘贴到一个名为“removeBackground()”的函数中,用于UISearchBar的扩展。然后,每当我想清除搜索栏的背景,我只需要调用searchbar.removeBackground() –

3

对于任何试图找到一个非哈克解决这个,只设置背景图片,以零上的情节提要/ XIB文件。从字面上看,只需在UISearchBar的背景图像字段中输入nil即可。

+1

Mind充分吹。 –

2

这是我在斯威夫特3(Scarafone的的组合和Andrew2M的答案)解决方案:

for view in searchBar.subviews.last!.subviews { 
     if type(of: view) == NSClassFromString("UISearchBarBackground"){ 
      view.alpha = 0.0 
     } 
} 

或者:

searchBar.barTintColor = UIColor.clear 
searchBar.backgroundColor = UIColor.clear 
searchBar.isTranslucent = true 
searchBar.setBackgroundImage(UIImage(), for: .any, barMetrics: .default)