iOS11自定义tabBar重影问题

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重影问题)