1.方法一:viewController.hidesBottomBarWhenPushed = YES;
viewController.hidesBottomBarWhenPushed = YES;
例如:判断是否是一级控制器,如果不是一级控制器,则跳转时隐藏底部tabbar
// 自定义navigationViewController
#import "ZGKNavigationViewController.h"
@interface ZGKNavigationViewController ()<UIGestureRecognizerDelegate>
@end
@implementation ZGKNavigationViewController
#pragma mark - UIGestureRecognizerDelegate
// 控制手势是否触发
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
// 在根控制器下,就不需要滑动手势,返回NO
return self.childViewControllers.count > 1;
}
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
// 根控制器不需要设置返回按钮
if (self.childViewControllers.count) { // 非根控制器
viewController.hidesBottomBarWhenPushed = YES;
}
// 注意。一定要记得调用super,
[super pushViewController:viewController animated:animated];
}
方法二:跳转之前,先设置要跳转的控制器hidesBottomBarWhenPushed的属性为YES
viewController.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:vc animated:YES];
方法三: 在控制器内部,如:viewDidLoad内部实现下面的语句
//隐藏
self.hidesBottomBarWhenPushed = YES;
//显示
self.hidesBottomBarWhenPushed = NO;
需要注意的是,使用self.hidesBottomBarWhenPushed = YES,self.view可能会因为高度不够,而造成底部出现矩形黑色阴影, 解决方法:
1.保存self.view的frame属性
2.给self.view填补tabbar隐藏后缺失的高度
3.需要显示tabbar的时候,还原self.view的frame, 并刷新界面
@interface ZGKMeViewController ()<UITableViewDelegate, UITableViewDataSource>
@property (nonatomic, assign) CGRect originRect;
@end
- (void)share{
self.tabBarController.tabBar.hidden = YES;
// 保存self.view之前的frame
self.originRect = self.view.frame;
// 填补tabbar空缺的高度
CGRect frame = self.view.frame;
frame.size.height = self.view.zgk_height + ZGKTabbarHeight;
self.view.frame = frame;
// 刷新界面
[self.view layoutIfNeeded];
}
- (void)cancelShare{
self.isShare = NO;
[UIView animateWithDuration:.2
animations:^{
CGRect frame = self.shareView.frame;
frame.origin.y = self.maskView.zgk_height;
self.shareView.frame = frame;
[self.view layoutIfNeeded];
} completion:^(BOOL finished) {
// 移除maskview
[self.maskView removeFromSuperview];
// 显示tabbar
self.tabBarController.tabBar.hidden = NO;
// 还原self.view的高度
self.view.frame = self.originRect;
[self.view layoutIfNeeded];
}];
}
网友评论