• iOS系统tabbar图标出现重影问题


    大家在自定义tabbar的时候会将系统的tabbar干掉,然后放上自已自定义的tabbar(含有想要的Button)对不对,具体代码如下:

    /**
     *  添加自定义的tabBar
     */
    -(void)addTabBarView
    {
        MSTabBar * tabbar = [[MSTabBar alloc]init];
        
        tabbar.backgroundColor = [UIColor whiteColor];
        
        tabbar.frame = self.tabBar.bounds;
        
        tabbar.delegate = self;
        
        tabbar.tabBarItems = self.tabBarItems;
        
        [self.tabBar addSubview:tabbar];
        
    }
    
    
    /**
     *  在主要控制器出来时将系统的tabbar移除掉只剩下自已的
     */
    -(void)viewWillAppear:(BOOL)animated{
        [super viewWillAppear:animated];
        
        
        //将tabbar里面的东西除了自定义的tabbar不删除,其他都删除
        //留下一个自定义的.想隐藏就能隐藏掉,只要设置tabbar的一个隐藏属性就好,
        for (UIView * view in self.tabBar.subviews)
        {
            
            if (![view isKindOfClass:[MSTabBar class]]) {
                
                [view removeFromSuperview];
            }
        }
        
    }

    然后完美使用自已自定义的,就可以随心所欲在view上做事情,或者做一些想要的动画  

    但是

    最近项目出现tabbar重影问题,我明明将系统的tabbar干掉了,但是还是感觉会出来,在我使用以下代码进行页面间的跳转的时候,重影问题出现了.

    重影图片居然长那么丑,就是系统的蓝色加上自已的色彩,完全懵逼了有木有!!!

      我设置的颜色是00d4d3 而重叠上系统的蓝色

    拿层级工具查看

    有没有觉得跟蛋疼,,,疼疼疼....

                                     这让我很尴尬啊,为什么去掉了系统的tabbar又出现了

             细心点会发现只是进行跨级跳跃的时候会出现该bug,只是我是这样出现的,不知道还有其他同学会怎么奇葩地出现改bug

            严肃来说如果只是单个跳转并没有出现重影,而进行跨级跳跃的时候会出现tabbar图标重影问题.

    以下代码为跨级跳转

     //发通知
        for (UIViewController *controller in self.navigationController.viewControllers) {
            
            if ([controller isKindOfClass:[MSDetailWebController class]]) {
                
                [self.navigationController popToViewController:controller animated:NO];
                
            }
            
        }

    在百度寻找了一堆答案,试了无限次遍,终于在一个方法里面实现几行代码就解决了,重影问题没有再出现过

    请同学们仔细观察以下~~!!!--------跨级跳转的时候会发现什么~!!

    具体原理不贴了,毕竟我们是解决问题的嘛~~(其实我也不知道发现啥,反正系统的tabbar会再出现一次)

    解决办法:

    -(void)viewWillLayoutSubviews
    {
        [super viewWillLayoutSubviews];
        
        for (UIView * view in self.tabBar.subviews)
        {
            
            if (![view isKindOfClass:[MSTabBar class]]) {
                
                [view removeFromSuperview];
            }
        }
    }

    在主要的视图layoutSubView中再删除一次,以防出现的时候不能删除,在viewWillAppear中删除只是保证删除一次

    所以要进行多次删除

    有同学会发现这样删除会不会把本来不存在的删除会出现空指针访问错误

    这样是不会出现这种问题的,因为是遍历他的子控件,发现有才删除,所以并不会删除不存在的东西

    这样就完美解决了问题,不会再重影问题,尽管你再怎么跳~~~来呀跳啊啊啊~~

  • 相关阅读:
    recess----2.Controller里面取用request信息
    recess----1.第一个APP-helloRecess
    Introducing MVC
    IFA Basics
    Why do Antennas Radiate?
    [JSP]JSP 简介
    [Spring]04_最小化Spring XML配置
    [设计模式]创建型模式
    [设计模式]原型模式
    [设计模式]建造者模式
  • 原文地址:https://www.cnblogs.com/coderYu/p/5859638.html
Copyright © 2020-2023  润新知