如何在UINavigationItem的右侧显示UISearchBar?

时间:2011-01-27 07:16:31

标签: iphone objective-c uinavigationcontroller uisearchbar

我正在尝试显示UISearchBar来代替UINavigationItem右侧显示的按钮。我正在使用此代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    UISearchBar *searchBar = [[UISearchBar alloc] init];
    UIBarButtonItem *navRight = [[UIBarButtonItem alloc] initWithCustomView:searchBar];
    [[self navigationItem] setRightBarButtonItem:navRight];

    [searchBar release];
    [navRight release];
}

但是,显示的搜索栏只有几个像素宽。我需要把它扩大。

我是以错误的方式来做这件事的吗?它有可能吗?

1 个答案:

答案 0 :(得分:2)

您需要在某个时刻设置UISearchBar的框架。

e.x。

UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 200, 20)];

编辑:关于UISearchBar下的按钮式工件

您在UISearchBar下看到的按钮实际上是UISearchBar的背景元素,而不是搜索栏与UIBarButtonItem重叠的结果。由于似乎没有一种很好的方法可以隐藏这个(我希望有人能够出现并纠正我),我只能指向一个hack的方向,它伴随着SDK的常见风险版本依赖,不优雅,以及更多头痛的可能性。

编辑2:另一种可能的解决方案

您还可以将UISearchBar的框架高度设置为44(导航栏的高度),然后背景应与导航栏很好地融合。基于我最近看到的this SO帖子。