Ios 导航栏中的UISearchBar

Ios 导航栏中的UISearchBar,ios,uinavigationbar,uisearchbar,Ios,Uinavigationbar,Uisearchbar,如何在导航栏中显示UISearchBar 我不知道该怎么做 非常感谢您的帮助。要将搜索栏置于导航栏的中心: self.navigationItem.titleView = self.searchBarTop; UIBarButtonItem *searchBarItem = [[UIBarButtonItem alloc] initWithCustomView:searchBar]; self.navigationItem.rightBarButtonItem = searchBarItem;

如何在导航栏中显示UISearchBar

我不知道该怎么做


非常感谢您的帮助。

要将搜索栏置于导航栏的中心:

self.navigationItem.titleView = self.searchBarTop;
UIBarButtonItem *searchBarItem = [[UIBarButtonItem alloc] initWithCustomView:searchBar];
self.navigationItem.rightBarButtonItem = searchBarItem;
要将搜索栏置于导航栏的左/右侧,请执行以下操作:

self.navigationItem.titleView = self.searchBarTop;
UIBarButtonItem *searchBarItem = [[UIBarButtonItem alloc] initWithCustomView:searchBar];
self.navigationItem.rightBarButtonItem = searchBarItem;

从iOS 7开始,UISearchDisplayController默认支持此功能。设置UISearchDisplayController的
显示SearchBarInnavigationBar=YES
,以使其易于工作

根据文件:

从iOS 7.0开始,您可以通过配置搜索显示控制器的displaysSearchBarInNavigationBar和navigationItem属性,将搜索显示控制器与导航栏(UINavigationBar类的实例)一起使用


正如一位评论者所指出的,使用
searchDisplayController.displaysSearchBarInNavigationBar=true
最终会隐藏任何现有的左/右栏按钮项

我在
searchDisplayController
上发现了两种不同的方法,可以使用iOS7的新属性将
searchBar
添加到
navigationBar

1)基于Nib的方法

如果使用的是.xib,则可以为此值设置一个用户定义的运行时属性,并且无论出于何种原因,LeftBarButtonim将保持tact状态。我没有用右巴布顿主义来测试它

2)代码(时间问题)

如果您想在代码中实现,时间似乎很重要。似乎您必须先将
搜索栏
添加到
导航栏
,然后设置
按钮项

- (void)viewDidLoad
{
    ...
    self.searchDisplayController.displaysSearchBarInNavigationBar = true;
    self.navigationItem.leftBarButtonItem = [UIBarButtonItem new];
    ...
}

查看苹果的示例代码。它显示了如何以三种不同的方式使用新的
UISearchController
:模式、导航栏中和导航栏下方。

目标C代码片段

- (void)viewDidLoad {
    UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:nil];

    if (@available(iOS 11.0, *)) {
        self.navigationItem.searchController = searchController;
    } else {
        self.navigationItem.titleView = searchController.searchBar;
    }
}

阅读更多

根据苹果的文档,我们似乎无法在标题视图中设置搜索栏。我说得对吗?您能告诉我们如何设置searchDisplayController的navigationItem吗?谢谢,我试过了,但是我的搜索栏在屏幕中间!使用故事板时,最简单的方法是将搜索栏和搜索显示控制器从实用程序区域拖到文档大纲内当前场景的底部。之后只需添加
self.searchDisplayController.displaysSearchBarInNavigationBar=YES在viewdidload中。您可能希望在编辑时显示取消按钮或隐藏backbutton,以便在代理实现中完成此操作。这会使搜索栏占据整个导航栏,隐藏任何现有的leftbar和RightBarButton。我怎么还能保留这些?@fishinear,看看我刚才发布的关于如何在维护左/右栏按钮项的同时将searchdisplaycontroller添加到导航的答案。我的问题是,在iPad上,结果显示在嵌入popover的表视图中,而不是原始表视图的框架中。有什么解决方法吗?如果我这样设置,则不再显示
searchDisplayController
cellforrowatinexpath:
方法也未调用。使用
searchDisplayController.displaysSearchBarInNavigationBar
可以工作,但我不能使用它,因为我也支持iOS 6…这种方法隐藏了标题self.navigationItem.titleView=searchBar,如果你想将其放在中心位置,我在情节提要中尝试了(1),但它崩溃了。该类与key displaysSearchBarInNavigationBar的键值编码不兼容。“您可以在情节提要中进行设置,但需要在搜索显示控制器上进行设置,而不是在视图控制器上进行设置;但是,它不会在我的测试中保留右键项,但会将搜索栏放在导航栏中。与上面的[UIBarButtonItem new]不同的是:
self.navigationItem.leftBarButtonItem=self.leftButton
(其中self.leftButton是左按钮的出口)。似乎自iOS 8.0以来,SearchDisplayController已被弃用。Ray Weinerlich对此有一个很好的教程。这些示例对我帮助很大。非常感谢。我在iOS上休息了几年,错过了很多UIKit更新。这很有帮助。苹果确实需要更好地组织他们的文档。我花了无数时间浏览WWDC视频/样本,搜索文档档案,但我从未见过这样的情况。感谢分享也许我错过了,但最新版本似乎只包含两个示例,默认和自定义,导航栏中都没有:(它仍然在iOS 12上工作。Objective-C开发人员的清洁解决方案:)