zoukankan      html  css  js  c++  java
  • 【iOS开发-31】UITabBar背景、icon图标颜色、被选中背景设置以及隐藏UITabBar的两种方式

    一、对UITabBar背景和icon图标的一些设置


    (1)由于直接给UITabBar设置的背景颜色显示的不纯。半透明的感觉,所以,有时候我们能够直接利用纯色的图片作为背景达到想要的效果。


    (2)给icon图片改变颜色也是重要的有用方法之中的一个,默认的时蓝色。


    在AppDelegate.m文件里:(1个导航控制器和5个视图控制器)

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        //创建5个视图控制器和1个导航控制器
        ViewController1 *vc1=[[ViewController1 alloc]init];
        UINavigationController *nav1=[[UINavigationController alloc]initWithRootViewController:vc1];
        ViewController2 *vc2=[[ViewController2 alloc]init];
        ViewController3 *vc3=[[ViewController3 alloc]init];
        ViewController4 *vc4=[[ViewController4 alloc]init];
        ViewController5 *vc5=[[ViewController5 alloc]init];
        ViewController *vc6=[[ViewController alloc]init];
        //6个标题
        nav1.title=@"界面1";
        vc2.title=@"界面2";
        vc3.title=@"界面3";
        vc4.title=@"界面4";
        vc5.title=@"界面5";
        vc6.title=@"界面6";
        //6个系统icon图标
        [nav1.tabBarItem initWithTabBarSystemItem:UITabBarSystemItemTopRated tag:1];
        [vc2.tabBarItem initWithTabBarSystemItem:UITabBarSystemItemSearch tag:2];
        [vc3.tabBarItem initWithTabBarSystemItem:UITabBarSystemItemContacts tag:3];
        [vc4.tabBarItem initWithTabBarSystemItem:UITabBarSystemItemMostViewed tag:4];
        [vc5.tabBarItem initWithTabBarSystemItem:UITabBarSystemItemMostRecent tag:5];
        [vc6.tabBarItem initWithTabBarSystemItem:UITabBarSystemItemDownloads tag:6];
        //创建一个视图控制器数组,并把它赋值给标签栏控制器的viewControllers值
        NSArray *arr1=[[NSArray alloc]initWithObjects:nav1,vc2,vc3,vc4,vc5,vc6, nil];
        UITabBarController *tbCon1=[[UITabBarController alloc]init];
        tbCon1.viewControllers=arr1;
        
        //标签栏控制器有个tabBar属性,这个属性有两个items和selectedItem属性是不能用的。由于这两个属性是归标签栏控制器直接管理,其它人不能对其赋值
        //执行下面两行代码,程序会崩溃
        //tbCon1.tabBar.items=[[NSArray alloc]initWithObjects:vc1.tabBarItem, nil];
        //tbCon1.tabBar.selectedItem=vc1.tabBarItem;
        
        //通过backgroundColor能够设置标签栏颜色,可是是一层淡淡的红色
        tbCon1.tabBar.backgroundColor=[UIColor redColor];
        
        //能够通过设置背景图片的方式给标签栏设置背景颜色。比方红色的背景图片。要求图片大小要正好
        //用下面方式获得标签栏宽高后,创建一个背景图片,再引入进来
        NSLog(@"%i,%i",(int)tbCon1.tabBar.frame.size.height,(int)tbCon1.tabBar.frame.size.width);
        tbCon1.tabBar.backgroundImage=[UIImage imageNamed:@"tabBarbg.png"];
        
        //通过tintColor能够给icon图标设置颜色
        tbCon1.tabBar.tintColor=[UIColor redColor];
        
        //设置被选中标签的背景图片,宽度是375/5=77
        tbCon1.tabBar.selectionIndicatorImage=[UIImage imageNamed:@"selectionDic.png"];
        
        //把这个标签栏控制器当做window的根视图控制器来显示
        self.window.rootViewController=tbCon1;
        
        // Override point for customization after application launch.
        return YES;
    }

    二、隐藏UITabBar的第一种方式


    这一种方式须要用导航控制器视图来做实验,由于我们须要用hidesBottomBarWhenPushed属性,这个属性的意思是,当这个视图被压到栈中时(导航控制器的栈)。隐藏底部的bar。包含UITabBar。


    所以我们以上面的nav1做实验,nav1的根视图控制器是vc1。我们在vc1中添加一个button。一点击就到ViewController7.m中(实例是vc7),并隐藏UITabBar。

    在vc1中:

    #import "ViewController1.h"
    #import "ViewController7.h"
    
    @interface ViewController1 ()
    
    @end
    
    @implementation ViewController1
    
    - (void)viewDidLoad {
        //
        UIButton *btn1=[UIButton buttonWithType:UIButtonTypeRoundedRect];
        btn1.frame=CGRectMake(38, 80, 300, 30);
        btn1.backgroundColor=[UIColor whiteColor];
        [btn1 setTitle:@"PUSH" forState:UIControlStateNormal];
        [btn1 addTarget:self action:@selector(jumpTo) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:btn1];
            
        [super viewDidLoad];
        // Do any additional setup after loading the view.
    }
    
    -(void)jumpTo{
        ViewController7 *vc7=[[ViewController7 alloc]init];
        [self.navigationController pushViewController:vc7 animated:NO];
    }
    
    @end
    

    在ViewController7.m中:

    #import "ViewController7.h"
    
    @interface ViewController7 ()
    
    @end
    
    @implementation ViewController7
    //添加一个initWithNibName方法,标配是return self。此外还须要在初始化时就设置它的hidesBottomBarWhenPushed属性为YES才干生效
    //即。在视图控制器的实例被载入到栈之前,就须要设置这个属性,否则无效
    -(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
        self.hidesBottomBarWhenPushed=YES;
        return self;
    }
    
    @end

    三、隐藏UITabBar的另外一种方式


    就是把UITabBar的位置移动。即调整frame.origin.y的值。消失就是把它移出屏幕,出现就是把它再放回原地。

    (但,还原时又卡顿现象,体验非常差,不建议)

    所以,在ViewController7.m中:

    //添加一个试图即将出现时的方法。并在此设置把tabBar下移。移除整个屏幕,相当于消失了
    -(void)viewDidAppear:(BOOL)animated{
        NSArray *arr1=self.tabBarController.view.subviews;
        UIView *view1=[arr1 objectAtIndex:0];
        UITabBar *tabBarView1=[arr1 objectAtIndex:1];
        //第一个视图就是全屏。不须要把高度撑满,所以能够不做不论什么设置
        //view1.frame=CGRectMake(0, 0, 375, 667);
        tabBarView1.frame=CGRectMake(0, 667, 375, 49);
    }

    在ViewController1.m中:

    //添加一个viewDidAppear,把下移的tabBar再上移,相当于还原到原地
    -(void)viewDidAppear:(BOOL)animated{
        NSArray *arr2=self.tabBarController.view.subviews;
        UITabBar *tabBarView2=[arr2 objectAtIndex:1];
        tabBarView2.frame=CGRectMake(0, 618, 375, 49);
    }


    事实上另一种隐藏方式。可是极具杀伤力。一隐全隐了,就是从根源上设置这个标签控制器不显示UITabBar。

    就是以下的第二行代码:

        UITabBarController *tbCon1=[[UITabBarController alloc]init];
        tbCon1.tabBar.hidden=YES;

    截个图:


  • 相关阅读:
    heat模板
    Leetcode812.Largest Triangle Area最大三角形面积
    Leetcode812.Largest Triangle Area最大三角形面积
    Leetcode811.Subdomain Visit Count子域名访问计数
    Leetcode811.Subdomain Visit Count子域名访问计数
    Leetcode806.Number of Lines To Write String写字符串需要的行数
    Leetcode806.Number of Lines To Write String写字符串需要的行数
    Leetcode819.Most Common Word最常见的单词
    Leetcode819.Most Common Word最常见的单词
    Leetcode783.Minimum Distance Between BST Nodes二叉搜索树结点最小距离
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5137382.html
Copyright © 2011-2022 走看看