iOS开发: 解决iPhoneX模拟器上push过程中tabBar上移问题

提示: 本篇以Swift代码讲解, 最下面为OC代码, 如果有问题请留言

问题描述
  • 当在iPhoneX模拟器上运行程序时, 如果在push的时候设置了控制器的hidesBottomBarWhenPushed属性为true, 那么push过程中有如下效果:


    tabBar上移问题
  • 图中可以发现, push过程中隐藏tabBar会导致tabBar上移一段距离
解决思路
  • 问题出现是在push过程中, 所以我们只需要拦截push过程即可, 即重写push方法, 并调整tabBar的位置
  • 第一步: 自定义导航控制器, 重写push方法(项目中大家基本都会这么做)
override func pushViewController(_ viewController: UIViewController, animated: Bool) {
    super.pushViewController(viewController, animated: animated)
}
  • 第二步: 设置push控制器的hidesBottomBarWhenPushed为true
override func pushViewController(_ viewController: UIViewController, animated: Bool) {
    if childViewControllers.count > 0 {
           // push时隐藏tabBar
           viewController.hidesBottomBarWhenPushed = true
    }
    super.pushViewController(viewController, animated: animated)
}
  • 第三步: 在spuer之后修改tabBar的frame
override func pushViewController(_ viewController: UIViewController, animated: Bool) {
    if childViewControllers.count > 0 {
           // push时隐藏tabBar
           viewController.hidesBottomBarWhenPushed = true
    }
    super.pushViewController(viewController, animated: animated)
    
    // 获取tabBar的frame, 如果没有直接返回
    guard var frame = self.tabBarController?.tabBar.frame else {
        return
    }
    // 设置frame的y值, y = 屏幕高度 - tabBar高度
    frame.origin.y = UIScreen.main.bounds.size.height - frame.size.height
    // 修改tabBar的frame
    self.tabBarController?.tabBar.frame = frame
}
最后效果
  • push过程中, 隐藏tabBar, 并且tabBar位置不变


    push过程中, 隐藏tabBar, 并且tabBar位置不变
OC版本代码如下:
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
    if (self.childViewControllers.count > 0) {
        // push过程中隐藏tabBar
        viewController.hidesBottomBarWhenPushed = YES;
    }
    
    // 重写super
    [super pushViewController:viewController animated:animated];
    
    // 修改tabBra的frame
    CGRect frame = self.tabBarController.tabBar.frame;
    frame.origin.y = [UIScreen mainScreen].bounds.size.height - frame.size.height;
    self.tabBarController.tabBar.frame = frame;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容