美文网首页
iOS11自定义tabBar重影问题

iOS11自定义tabBar重影问题

作者: biyu6 | 来源:发表于2018-11-27 17:04 被阅读0次

    iOS11以后,自定义tabBar会出现重影问题,之前的两种方法都无法解决:

    //之前解决重影问题的方法一:重写导航控制器的方法进行拦截
    - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
        for (UIView *tabBar in self.tabBarController.tabBar.subviews) {// 删除系统自带的tabBarButton
                if (![tabBar isKindOfClass:[BYMainTabBarView class]]) {
                    [tabBar removeFromSuperview];
                }
        }
    }
    //之前解决重影问题的方法二:在自定义的tabBar控制器中删除
    - (void)viewWillAppear:(BOOL)animated{
        [super viewWillAppear:animated];
        //删除非自定义的tabBar(即删除系统的UITabBarButton)
        for (UIView *child in self.tabBar.subviews) {
            if (![child isKindOfClass:[BYMainTabBarView class]]) {
                [child removeFromSuperview];
            }
        }
    }
    
    //这两种方法,只能保证tabBar栏的几个控制器之间跳转不会重影;一旦点击了其他二级控制器,回到tabBar时就会出现重影的问题
    

    最新的解决方式为:将上面两种方法都舍弃掉,在自定义的tabBar控制器中添加以下代码:

    - (void)viewWillLayoutSubviews{//每次layout时都删除一次
        [super viewWillLayoutSubviews];
        //删除非自定义的tabBar(即删除系统的UITabBarButton)
        for (UIView * view in self.tabBar.subviews){
            if (![view isKindOfClass:[BYMainTabBarView class]]) {
                [view removeFromSuperview];
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:iOS11自定义tabBar重影问题

          本文链接:https://www.haomeiwen.com/subject/lefnqqtx.html