2014-01-08 79 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)