ios更改UITabBarController背景以及选中背景图片的方法

一、背景图片
  1、5.0以上版本
     UIImage *image = [UIImage imageNamed:@"system_tabbar_bg.png"];
     [self.tabBar setBackgroundImage:image];
  2、5.0以下版本
     UIImage *image = [UIImage imageNamed:@"system_tabbar_bg.png"];
     NSArray *array = [self.view subviews];
     UITabBar *tabBar = [array objectAtIndex:1];
     tabBar.layer.contents = (id)image.CGImage;
 
  二、选中的item的背景图片设置
  1、5.0以上版本
     self.tabBar.selectionIndicatorImage = [UIImage imageNamed:@"system_tabbar_item_selected.png"];
  2、5.0以下版本
     首先实现如下方法:
- (void)setNoHighlistTabBar:(UITabBarController *)tabBarController
{
    NSArray * tabBarSubviews = [tabBarController.tabBar subviews];
   
    int index4SelView;
   
    if(tabBarController.selectedIndex+1 > 4)
    {//selected the last tab.
        index4SelView = [tabBarSubviews count]-1;
    }
    else if([tabBarController.viewControllers count] > 5)
    {//have "more" tab. and havn't selected the last tab:"more" tab.
       
       
        index4SelView = [tabBarSubviews count] - 5 + tabBarController.selectedIndex;
    }
    else
    {//have no "more" tab.
       
       
        index4SelView = [tabBarSubviews count] -
        [tabBarController.viewControllers count] + tabBarController.selectedIndex;
    }
    if([tabBarSubviews count] < index4SelView+1)
    {
        assert(false);
        return;
    }
    UIView * selView = [tabBarSubviews objectAtIndex:index4SelView];
   
    NSArray * selViewSubviews = [selView subviews];
   
    for(UIView * v in selViewSubviews)
    {
        if(v && [NSStringFromClass([v class]) isEqualToString:@"UITabBarSelectionIndicatorView"])
       
        {//the v is the highlight view.
            [self.selectedItemBgImageView removeFromSuperview];
            [selView insertSubview:self.selectedItemBgImageView belowSubview:v];
           
            [v removeFromSuperview];
           
           
            break;

        }
    }
}
  改方法的实质就是循环tabBar的subViews, 找到tabBar中的这个view, 是一个UITabBarSelectionIndicatorView的view,然后把它替换成你自己创建的UIImageView, 上例中的self.selectedItemBgImageView.
  然后需要把UITabBarController的delegate设为self, 在tabBarController:didSelectViewController的代理方法中执行上面的方法:[self setNoHighlistTabBar:self];
 还有setSelectIndex:方法中也要执行[self setNoHighlistTabBar:self];

 

============以下为20200220 更新===========

在13 的新系统上 bar的文字选中色在经过push操作后变蓝,如上图所示.这个是ios 13 系统的一个bug。需要程序员来填坑。

解决办法:在设置tabbar相关appearance的代码处,再单独加一个13系统的处理即可:

if(@available(iOS13.0, *)) {

        [[UITabBar appearance] setTintColor:[UIColor greenColor]];

        [[UITabBar appearance] setUnselectedItemTintColor:[UIColor grayColor]];

    }



更多链接请看
链接:
https://www.jianshu.com/p/96096df52b53
https://www.jianshu.com/p/82b94ceb38d0
https://www.jianshu.com/p/a5461adff3ae

posted on 2015-10-13 19:12  &#127774;Bob  阅读(600)  评论(0编辑  收藏  举报

导航