UISearchController 隐藏tabbar的一个方法
一个基于UITabbarController的项目,使用 UISearchController 搜索的时候需隐藏tabbar,一个可行的办法是:
1. 实现UISearchControllerDelegate协议;
2. 在willPresentSearchController方法中隐藏tabbar,如 self.tabBarController.tabBar.hidden = YES;
3. 在willDismissSearchController方法中重新显示tabbar。
搜索结果通过navigationController push到详情页面,返回的时候会重新显示tabbar,而此时UISearchControllerDelegate的方法尚未执行,针对这个情况,可以新增加一个属性:@property (nonatomic) BOOL searchVCShowing;
然后再在viewWillAppear方法中添加如下代码:
if (self.searchVCShowing) {
self.tabBarController.tabBar.hidden = YES;
} else {
self.tabBarController.tabBar.hidden = NO;
}
再在willPresentSearchController中设置searchVCShowing为YES,在willDismissSearchController中设置 searchVCShowing为NO。
这样就可以解决SearchController隐藏tabbar的问题了。
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
if (self.searchVCShowing) {
self.tabBarController.tabBar.hidden = YES;
} else {
self.tabBarController.tabBar.hidden = NO;
}
}
#pragma mark -------- searchController
- (void)willPresentSearchController:(UISearchController *)searchController{
[self.tabBarController.tabBar setHidden:YES];
self.searchVCShowing = YES;
}
- (void)willDismissSearchController:(UISearchController *)searchController{
[self.tabBarController.tabBar setHidden:NO];
self.searchVCShowing = NO;
}
你好,这个方法我现在用在iphoneX上,在从搜索列表点击cell进入detailVc以后再回退回来,tabar的显示就往下移动了一段距离,不知道是什么原因呢?