我改变了我的searchBar代码:
self.navigationItem.titleView = searchNavigation.searchController.searchBar;
到:
if (@available(iOS 11.0, *)) {
self.navigationItem.searchController = searchNavigation.searchController;
self.navigationController.navigationBar.prefersLargeTitles = NO;
self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeNever;
} else {
self.navigationItem.titleView = searchNavigation.searchController.searchBar;
}
但是当试用ios 11时,它看起来像是
在searchBar上有额外的空间,当我开始输入它的幻灯片顶部并且看起来正常时
答案 0 :(得分:1)
首先,对于iOS 11,您将搜索控制器分配给导航项searchController属性,而不是它的titleView。如果您这样做,那么搜索栏会显示在您看到的导航栏下方。
其次,UISearchController上有一个名为hidesNavigationBarDuringPresentation
的属性,它控制搜索栏是否向上移动以在使用时隐藏导航栏。
要为iOS 11复制以前版本的内容,请执行以下操作:
if (@available(iOS 11.0, *)) {
self.navigationItem.titleView =
searchNavigation.searchController.searchBar;
searchNavigation.searchController.hidesNavigationBarDuringPresentation = NO;
self.navigationController.navigationBar.prefersLargeTitles = NO;
self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeNever;
} else {
self.navigationItem.titleView =
searchNavigation.searchController.searchBar;
}
答案 1 :(得分:0)
如先前的回答所述,将导航栏的searchController
设置为所需的搜索栏将产生位于导航栏新“大标题”下方的搜索栏。
要停止这种新行为,您需要使用搜索栏本身覆盖导航栏的titleView
,并禁用一旦输入开始就隐藏大标题的搜索控制器动画。可以这样做:
navigationItem.titleView = searchController.searchBar
searchController.hidesNavigationBarDuringPresentation = false