zoukankan      html  css  js  c++  java
  • 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中删除只是保证删除一次

    所以要进行多次删除

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

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

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

  • 相关阅读:
    java基础知识--数据结构
    java基础知识--Iterator迭代器
    java基础知识--Collection、Collections、泛型
    java基础知识--包装类
    java基础知识--日期时间类
    java基础知识--final关键字
    java基础知识--类和接口
    Mina学习之---mina整体流程介绍
    多线程之----线程互斥再续
    多线程之----线程互斥
  • 原文地址:https://www.cnblogs.com/coderYu/p/5859638.html
Copyright © 2011-2022 走看看