在 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?我试过storyboardviewDidLoad 中的设置

【问题讨论】:

【参考方案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) 在 vi​​ewDidLoad 中添加如下代码:

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的主要内容,如果未能解决你的问题,请参考以下文章

在ios上滑动静态页面卡顿怎么解决

UIWebView半透明设置

光标未在我们的应用程序的 UISearchBar 中显示

jquery dialog 怎样半透明

带有半透明导航栏的滚动条

iPhone 子视图可以透明吗?