【问题标题】:Setting translucent to NO on UISearchBar在 UISearchBar 上将半透明设置为 NO
【发布时间】: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 中的设置

【问题讨论】:

    标签: ios uitableview ios7 uisearchbar uisearchbardisplaycontrol


    【解决方案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];
    

    【讨论】:

      猜你喜欢
      • 2014-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多