如何在UIBarButtonItem中使用UISearchBar?

时间:2015-08-14 01:54:23

标签: ios autolayout uisearchbar uibarbuttonitem uisearchcontroller

我在iOS 8中使用UISearchController,当我将其UISearchBar作为我的表的标题视图时,一切都很好。但是现在我需要它在我的UINavigationBar的左栏按钮(由于我放大导航栏时的垂直居中而不能是标题视图)。当我将UISearchBar包装在UIBarButtonItem中时,它大于屏幕的宽度。

off screen search bar

我认为这与我在启用了大小类的故事板中初始化的视图控制器有关,这意味着我的框架在viewDidLayoutSubviews之前不会被设置。但是我在工具栏中的分段控件遇到了同样的问题,我在sizeToFit的工具栏上调用viewDidLayoutSubviews并修复了工具栏。当我对搜索栏执行相同操作时,它仍会部分地在屏幕上绘制。 Apple在他们的一些iPad应用中做到了这一点,但是如何?

注意:我可以破解它以在屏幕上显示所有内容但我必须将其包装在另一个视图中但是然后颜色关闭并且它似乎是错误的并且我认为动画已关闭。

1 个答案:

答案 0 :(得分:1)

您需要使用UIBarButtonSystemItemFixedSpace创建一个UIBarButtonItem,其宽度为-10,这将删除10个px填充。

UIBarButtonItem *Spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
[Spacer setWidth:-10];
UISearchBar *searchBar= [[UISearchBar alloc] initWithFrame:CGRectMake(0, 5, self.view.frame.size.width-10, 39)];
UIBarButtonItem *searchBarItem = [[UIBarButtonItem alloc] initWithCustomView:searchBar];
self.navigationItem.leftBarButtonItems = [NSArray arrayWithObjects:Spacer,searchBarItem,nil];