NavigationBar上的iOS 11额外空间

时间:2018-01-08 12:29:56

标签: swift autolayout uinavigationbar ios11

我改变了我的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时,它看起来像是

enter image description here

在searchBar上有额外的空间,当我开始输入它的幻灯片顶部并且看起来正常时

enter image description here

2 个答案:

答案 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