UINavigationItem 中的搜索栏

Posted

技术标签:

【中文标题】UINavigationItem 中的搜索栏【英文标题】:SearchBar in UINavigationItem 【发布时间】:2011-08-09 03:01:22 【问题描述】:

我使用以下代码在 UINavigationItem 中添加了一个搜索栏:

UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectZero];
[searchBar sizeToFit];
searchBar.delegate = self;
self.navigationItem.titleView = searchBar;
self.navigationItem.title = self.category.title;
[searchBar release];

但结果 UI 是这样的:

如何更改搜索栏的颜色,使其与导航栏的背景相同?

谢谢。

【问题讨论】:

【参考方案1】:

对于 UINavigationBar,有多种方法可以控制它的背景颜色:

    将 tintColor 属性设置为您需要的颜色。 按照建议的修改方式应用自定义渐变或其他图案图像 — http://leonov.co/2011/04/uinavigationbar-and-uitoolbar-customization-ultimate-solution/

对于搜索栏 tintColor 也可用。但在你的情况下,我建议继承表单 UISearchBar 并提供如下所示的实现,以完全摆脱背景绘图例程。在这种情况下,您将在透明工具栏上获得搜索栏,并且您将只需要管理 UINavigationBar 颜色。

//TransparentSearchBar.m

@interface TransparentSearchBar()
- (void)removeBackgroundView;
@end

@implementation TransparentSearchBar

- (id)init

    self = [super init];

    if(self) 
        [self removeBackgroundView];
    

    return self;


- (id)initWithCoder:(NSCoder *)aDecoder 

    self = [super initWithCoder:aDecoder];

    if(self) 
        [self removeBackgroundView];
    

    return self;


- (id)initWithFrame:(CGRect)frame 

    self = [super initWithFrame:frame];

    if(self) 
        [self removeBackgroundView];
    

    return self;


- (void)removeBackgroundView 

    for (UIView *view in self.subviews)
    
        if ([view isKindOfClass:NSClassFromString
             (@"UISearchBarBackground")])
        
            [view removeFromSuperview];
            break;
        
    


@end

【讨论】:

我从 UISearchBar 继承,drawRect 设置为空,然后在我的代码中使用该类。但搜索栏不透明。我不想改变导航栏的颜色,我只想让搜索栏透明,这样看起来更好。这似乎是解决方案,但它不起作用。 我的错。我用 UIToolbar 模拟了它,但这没有用。我为 UISearchBar 编写了一个替代解决方案,您可以在我的答案中找到它。 嗨,Nikita,您的解决方案在 ios 4.3 上运行良好。但是当我最近在 4.1 iPhone 上运行该应用程序时,搜索栏的背景是黑色的。你对此有什么想法吗?谢谢。 self.backgroundColor = [UIColor clearColor]; 也必须添加到 removeBackgroundView 中。它删除了重绘条时出现的黑色背景。可能它可以帮助 4.1,虽然我没有检查。【参考方案2】:

如果您在 UISearchBar 上看到文档,它具有“tintColor”属性。 将其设置为导航栏的颜色。

如果不知道navigationbar的颜色,获取navigationBar的tintColor。

您可能还想使用搜索栏的“半透明”属性。可能会更好。

【讨论】:

以上是关于UINavigationItem 中的搜索栏的主要内容,如果未能解决你的问题,请参考以下文章

SearchResultsController 与 UINavigationItem 一起使用时会遮挡屏幕

我的 UINavigationitem 的 TitleView 在 ios 6 中得到扩展

UINavigationItem 的背景颜色

在 iOS 11 上,导航项中的搜索栏在导航弹出时折叠并卡在状态栏下

在 ios 中为 UINavigationitem(左栏按钮项)设置图像

使用 UINavigationItem 类的属性 leftItemsSupplementBackButton