2011-02-09 71 views
1

我知道这个问题曾被问及(并解决过),但这不会为我工作。事实上,我已经解决了这个问题,但这个问题没有任何意义,让我头痛。iPad/iPhone uiSearchbar透明背景

我无法将我的UISearchBar的背景设置为透明。 我一直在使用:

searchBar.backgroundColor = [UIColor clearColor]; 
[[searchBar.subviews objectAtIndex:0] removeFromSuperview]; 

它的工作很好......但突然它停了下来。可能是因为我升级了我的xcode版本,但我不确定。 我花了几个小时已经在调查这个.. 有人在那里做这个?请指向正确的方向。 谢谢堆!!!

问候 牛逼

+0

看到我的答案在这里。 http://stackoverflow.com/a/10647443/751026 – thesummersign 2012-05-18 06:06:04

回答

10

尝试通过您的子视图循环,并寻找合适的类:

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

我不知道,但我不认为你可以假设指数0是背景图。 上面的例子适用于我。

+0

虽然它的工作原理,我可能不会建议在生产中这样做。据我所知,这是没有记录在API中,所以有可能在任何操作系统更新您的代码可能会停止工作。我认为做你想做的最好的方法是编写你自己的搜索栏。 – 2011-02-09 11:22:54

+0

感谢您的意见。我连接了一个新的uisearchbar,突然之间旧的工作正常......怪异! – Tom 2011-02-09 12:44:05

0

它仍然适用于我,所以也许在你的代码中的其他东西混淆了它。你确定searchBar是否正确设置(在IB中连接插座,在视图初始化后调用呼叫等等)? 最好的方法是打印出[searchBar.subviews objectAtIndex:0]的内容,它应该是一个UISearchBarBackground对象。 而且顺便说一句,既然苹果能够改变他们想要的UISearchBar视图层次任何时候,你最好做一些检查:searchBar.subviews.count和

if ([[searchBar.subviews objectAtIndex:0] class] == NSClassFromString(@"UISearchBarBackground")) ... 

调用之前。

0

您只需要将searchBarStyle属性更改为UISearchBarStyleMinimal。默认情况下它是UISearchBarStyleProminent。您可以在故事板或代码中更改它,如下所示。

self.yourSearBar.searchBarStyle = UISearchBarStyleMinimal;