UISearchController 隐藏tabbar

/ 1评 / 0

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;
}

一条回应:“UISearchController 隐藏tabbar”

  1. mike说道:

    你好,这个方法我现在用在iphoneX上,在从搜索列表点击cell进入detailVc以后再回退回来,tabar的显示就往下移动了一段距离,不知道是什么原因呢?