在 UISearchBar 上将半透明设置为 NO
Posted
技术标签:
【中文标题】在 UISearchBar 上将半透明设置为 NO【英文标题】:Setting translucent to NO on UISearchBar 【发布时间】:2013-09-25 17:29:53 【问题描述】:我们有一个UITableView
和一个searchbar
加上searchDisplayController
。
我们希望在整个应用程序中关闭半透明。
导航栏和其他栏的半透明关闭,但使用显示控制器时搜索栏没有。在应用程序的一部分中,当我们使用搜索栏而不是显示控制器时,半透明设置正确。
如何将UISearchBar
的半透明属性与显示控制器设置为NO?
编辑:
这是我在viewDidLoad
中的代码
self.navigationController.navigationBar.translucent = NO;
BOOL t = self.searchDisplayController.searchBar.translucent;
self.searchDisplayController.searchBar.translucent = NO;
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
self.searchDisplayController.searchBar.barTintColor = [UIColor redColor];
UIBarStyle b1 = self.searchDisplayController.searchBar.barStyle;
UISearchBarStyle b2 = self.searchDisplayController.searchBar.searchBarStyle;
BOOL t2 = self.searchDisplayController.searchBar.translucent;
在调试器中运行,t = YES 和 t2 = YES。 b1 = UIBarStyleDefault
和 b2 = UISearchBarStyleDefault
。我是否在错误的位置设置了 NO?我试过storyboard
和viewDidLoad
中的设置
【问题讨论】:
【参考方案1】:对于 UISearchBarStyleProminent:
1) 一定要检查属性检查器中搜索栏的“半透明”框。
2) 将以下内容添加到 viewDidLoad:
self.navigationController.navigationBar.translucent = NO; // If you have a navBar
self.searchDisplayController.searchBar.translucent = NO;
编辑来自@RudolfAdamkovic:
“我发现对于
UISearchBarStyleProminent
,执行 [以下] 会有所帮助。这样,您可以在 Storyboard 中继续使用它。”searchBar.translucent = YES;
searchBar.translucent = NO;
对于 UISearchBarStyleMinimal:
为了让最小的搜索栏不透明,我制定了一个解决方法。
1) 一定要检查属性检查器中搜索栏的“半透明”框。
2) 在 viewDidLoad 中添加如下代码:
self.navigationController.navigationBar.translucent = NO;
self.searchDisplayController.searchBar.translucent = NO;
self.searchDisplayController.searchBar.backgroundColor = [UIColor desiredColor];
3) 需要将 UIView 添加到 viewController。此视图需要 20px 高,并且应该与 searchBar.barTintColor 具有相同的颜色。
注意:我认为这种解决方法是必要的,因为:"The style UISearchBarStyleMinimal provides no default background color or image but will display one if customized as such." 因此,为 UISearchBarStyleMinimal 获取此功能的唯一方法是设置 backgroundColor。
查看 UISearchBar documentation 了解更多详情。
【讨论】:
那不起作用,这就是我发布问题的原因。我希望我能接受这个答案是正确的。 是的,对不起。我只是注意到这不是完整的答案。我已经更新了答案并验证它对我有用。 @JasonHocker - 你的 searchBar 的半透明在情节提要中关闭了吗?我问是因为每当我通过情节提要关闭它时,我都无法以编程方式对其进行更新(这意味着每次我将它设置为 NO 时它仍然是 YES)。在情节提要中打开半透明后,我就能够以编程方式设置值并记录其更改。 太好了,我很高兴。 “硬”是指伤害吗?如果是这样,我认为将来放入此代码没有害处。至于它是一个错误,我不确定 Apple 是否非常喜欢我们尝试使用没有某种形式的半透明的搜索栏。我这样说是因为我想不出 ios 7 的例子。话虽如此,是的,这似乎是苹果应该修复的错误。 @JamesNelson 感谢您的回答。我拉头发15分钟了。顺便说一句,我发现对于UISearchBarStyleProminent
,执行searchBar.translucent = YES; searchBar.translucent = NO;
会有所帮助。这样,您就可以在 Storyboard 中继续使用它。【参考方案2】:
以上答案均不适用于 iOS 7/8。这里有一些设置代码可以解决问题:
searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.frame), 44)];
searchBar.scopeButtonTitles = @[@"Scope1", @"Scope2"];
searchBar.selectedScopeButtonIndex = 0;
searchBar.backgroundColor = [UIColor clearColor];
searchBar.barTintColor = [UIColor clearColor];
searchBar.translucent = YES; // SUPER IMPORTANT, REMOVING THIS MESSED UP THE SCOPE BAR
// ONLY USE IMAGES, NOT BACKGROUND COLORS
UIImage *searchBarBackgroundImage = [[UIImage imageNamed:@"SearchBarBackgroundImage"];
UIImage *scopeBarBackgroundImage = [[UIImage imageNamed:@"ScopeBarBackgroundImage"];
[searchBar setBackgroundImage:searchBarBackgroundImage
forBarPosition:UIBarPositionAny
barMetrics:UIBarMetricsDefault];
searchBar.scopeBarBackgroundImage = scopeBarBackgroundImage;
searchBar.tintColor = [UIColor whiteColor];
【讨论】:
以上是关于在 UISearchBar 上将半透明设置为 NO的主要内容,如果未能解决你的问题,请参考以下文章