5

我们有一个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

4

2 回答 2

8

对于 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)需要在viewController中添加一个UIView。此视图需要 20px 高,并且应该与 searchBar.barTintColor 具有相同的颜色。

注意:我认为这种解决方法是必要的,因为:“样式 UISearchBarStyleMinimal 不提供默认背景颜色或图像,但如果这样自定义,将显示一个。” 因此,为 UISearchBarStyleMinimal 获得此功能的唯一方法是设置 backgroundColor。

有关更多详细信息,请参阅 UISearchBar文档

于 2013-09-25T18:14:54.593 回答
1

以上答案均不适用于 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];
于 2014-11-03T19:16:46.847 回答