【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个标题
    [email protected]"界面1";
    [email protected]"界面2";
    [email protected]"界面3";
    [email protected]"界面4";
    [email protected]"界面5";
    [email protected]"界面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;

截个图:

时间: 2025-01-22 14:56:32

【iOS开发-31】UITabBar背景、icon图标颜色、被选中背景设置以及隐藏UITabBar的两种方式的相关文章

【iOS开发-28】制造UITabBarController标签控制器的过程以及定制UITabBarItem文字图片的6种方式

一.一个简单的创造过程(实际项目不推荐这种方式,仅做演示理解原理用) 在AppDelegate.m中: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //创建一个到导航控制器 UIViewController *vc1=[[UIViewController alloc]init]; UINavigationControll

【iOS开发-56】案例BUG:按钮的enabled、控件的userInteractionEnabled以及两种提示框UIAlert和UIActionSheet

接上述案例找BUG:[iOS开发-51]案例学习:动画新写法.删除子视图.视图顺序.延迟方法.按钮多功能用法及icon图标和启动页设置 (1)BUG:答案满了就不能再点击option按钮,答案没满就能点. 在optionClick方法的if(full)中设置,即判断答案是否满了,如果满了,则: if (full) { //如果答案满了,不管是否正确,只要满了,下面的option按钮就不能被点击 for (UIButton *optionBtn in self.optionView.subview

【iOS开发-56】案例BUG:button的enabled、控件的userInteractionEnabled以及两种提示框UIAlert和UIActionSheet

接上述案例找BUG:[iOS开发-51]案例学习:动画新写法.删除子视图.视图顺序.延迟方法.button多功能使用方法及icon图标和启动页设置 (1)BUG:答案满了就不能再点击optionbutton,答案没满就能点. 在optionClick方法的if(full)中设置,即推断答案是否满了,假设满了.则: if (full) { //假设答案满了,无论是否正确,仅仅要满了,以下的optionbutton就不能被点击 for (UIButton *optionBtn in self.opt

android菜单创建的两种方式和菜单项添加图标

    菜单创建的两种方式:     1.在xml文件中创建菜单: 具体代码: <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context="com.xunfang.menucreate.MainActivity" > //此处创建子菜单 <

jQuery开发插件的两种方式

最近挺多人写jQuery的,都是关于jQuery扩展方面的,使用方面的讲的比较多,但是关于详细的一个基础的过程讲的比较少一点,做web开发的基本上都会用到jQuery,本人就根据jQuery的使用经验讲讲插件开发.jQuery插件开发两种方式:一种是类扩展的方式开发插件,jQuery添加新的全局函数(jQuery的全局函数是属于jQuery命名空间的函数),如果将jQuery看成一个类,那么就相当于给jQuery类本身添加方法.第二种是对象扩展的方式开发插件,即jQuery对象添加方法. 类扩展

iOS中创建单例的两种方式

刚刚开始做iOS开发的时候,不知道怎么创建单例,在网上搜的也大多数都不太全,所以总结了一下创建单例的两种方式 首先在.h文件中声明类方法 1 +(instancetype)sharedUtils; 然后在.m文件中实现它,实现的方法有两种 第一种,在创建一个对象时先判断在程序中有没有创建过这个对象 1 static PublicUtils *DefaultManager = nil; 2 3 +(instancetype)sharedUtils 4 { 5 if (!DefaultManager

Android开发中单元测试的两种方式

Android开发中单元测试的两种方式 一位优秀的程序员也同样不能保证自己的程序没有bug,因此编写合适的测试程序是完全有必要的,这样也会降低程序在后期出现各种奇奇怪怪bug的可能,降低维护成本,未雨绸缪将bug扼杀在摇篮之中. 看到网上有很多依旧用写java单元测试的方式在写android程序的单元测试程序--junit,当然我一直都反感将不合时宜的东西强搬到新的技术应用以获取一席之地的这种做法,不断的应用新的方法提高效率,完善程序才是真理!废话不多说,直接说到今天的重点:Android开发中

HTML中设置背景图的两种方式

HTML中设置背景图的两种方式 1.background    background:url(images/search.png) no-repeat top; 2.background-image    background-image:url(images/search.png):    background-repeat:no-repeat;

Android开发之使用sqlite3工具操作数据库的两种方式

使用 sqlite3 工具操作数据库的两种方式 请尊重他人的劳动成果,转载请注明出处:Android开发之使用sqlite3工具操作数据库的两种方式 http://blog.csdn.net/fengyuzhengfan/article/details/40193123 在Android SDK的tools目录下提供了一"sqlite3.exe工具,它是一个简单的SQLite数据库管理工具,类似于MySQL提供的命令行窗口在有些时候,开发者利用该工具来査询. 管理数据库. 下面介绍两种方式: 第

iOS 自定义layer的两种方式

在iOS中,你能看得见摸得着的东西基本都是UIView,比如一个按钮,一个标签,一个文本输入框,这些都是UIView: 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个图层 @property(nonatomic,readonly,retain) CALayer *layer; 每一个UIView内部都默认关联一个CALayer,我们可称这个Laye