我们有一个UITableView
,searchDisplayController
中添加了一个searchbar
。
我们希望在整个应用程序中关闭半透明性。
我关闭了导航栏和其他栏的半透明性,但在使用显示控制器时没有关闭搜索栏。 在应用程序的一部分中,当我们使用搜索栏而不是显示控制器时,半透明性设置正确。
如何将显示控制器的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 = 是,t2 = 是。 b1 = UIBarStyleDefault
和 b2 = UISearchBarStyleDefault
。 我是否在错误的位置设置了 NO? 我尝试了storyboard
和这里的设置viewDidLoad
对于 UISearchBarStyleProminent:
1( 请务必选中属性检查器中搜索栏的"半透明"框。
2( 将以下内容添加到 viewDidLoad:
self.navigationController.navigationBar.translucent = NO; // If you have a navBar
self.searchDisplayController.searchBar.translucent = NO;
从@RudolfAdamkovic编辑:
"我发现对于
UISearchBarStyleProminent
来说,执行[以下]会有所帮助。这样,您就可以在故事板中保持打开状态。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 添加到视图控制器中。 此视图需要为 20px 高,并且应具有与 searchBar.barTintColor 相同的颜色。
注意:我认为需要此解决方法,因为:"样式UISearchBarStyleMinimal不提供默认的背景颜色或图像,但如果这样自定义,将显示一个。因此,为 UISearchBarStyleMinimal 获取此功能的唯一方法是设置 backgroundColor。
有关更多详细信息,请参阅 UISearchBar 文档。
以上答案在 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];