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中增加一个按钮,一点击就到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背景、icon图标颜色、被选中背景设置以及隐藏UITabBar的两种方式的更多相关文章
- HTML中设置背景图的两种方式
HTML中设置背景图的两种方式 1.background background:url(images/search.png) no-repeat top; 2.background-image ...
- 【iOS开发-31】UITabBar背景、icon图标颜色、被选中背景设置以及隐藏UITabBar的两种方式
一.对UITabBar背景和icon图标的一些设置 (1)由于直接给UITabBar设置的背景颜色显示的不纯.半透明的感觉,所以,有时候我们能够直接利用纯色的图片作为背景达到想要的效果. (2)给ic ...
- Jquery EasyUI修改行背景的两种方式
1.数据加载完成不请求后台的做法 方式一: //更改表格行背景 function changeLineStyle(index){ var rows=$("#alertGird"). ...
- 自定义UITabBar的两种方式
开发中,经常会遇到各种各样的奇葩设计要求,因为apple提供的UITabBar样式单一,只是简单的"图片+文字"样式,高度49又不可以改变.自定义UITabBar成为了唯一的出路. ...
- iOS实现渐变色背景(两种方式实现)
之前做过类似的功能,现在记录一下,来来来... 效果图: 说明=========================== 方法1: 说明:无返回值 用法:直接调用方法.原理是在view的layer层添加. ...
- Web内容禁止选中的两种方式
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/ShiJiaqi. http://www.cnblogs.com/shijiaqi1066/p/5761818. ...
- [Asp.net]DropDownList改变默认选中项的两种方式
引言 其实是不想总结这方面的内容,发现太简单了,可是在这上面也栽了跟头.所以还是记录一下吧,算是提醒自己,不要太看不起太基础的东西,有这种心理,是会载大跟头的. 一个例子 这里模拟一下最常用的一个例子 ...
- JS组件系列——不容错过的两款Bootstrap Icon图标选择组件
前言:最近好多朋友在群里面聊到bootstrap icon图标的问题,比如最常见的菜单管理,每个菜单肯定需要一个对应的菜单图标,要是有一个可视化的图标选择组件就好了,最好是直接选择图标,就能得到对应的 ...
- iOS-UIView-设置背景图片4种方式
一 . 设置UIView的背景图片 1.将图片作为UIView的背景色,该方法过于占内存,不建议使用. //1.imageNamed方式 self.view.backgroundColor = ...
随机推荐
- C# 初识Ref和Out
首先:两者都是按地址传递的,使用后都将改变原来参数的数值. 其次:ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所 ...
- with admin option 与with grant option
在赋予user 权限或者role 时,常常会用到with admin option 和with grant option,而在使用中,可能会很容易出现混淆的情况,现把他们的相同点和不同点总结如下:相同 ...
- oracle数据库常用查询一
oracle数据库常用查询一 sqlplus / as sysdba; 或sqlplus sys/密码 as sysdba;两者都是以sys登录.conn scott/tiger@orcl; conn ...
- 阿里云 RDS 怎么保证高可用性
RDS在系统构建之初,从网络到硬件再到系统都是基于高可用设计,他可以做到故障30秒无缝转移,对应用完全透明. 当一个数据库实例发生故障时, 另一个会立即顶上,而且对应用是完全透明的.你无需变更应用的连 ...
- post请求和get请求的区别
1:如果表单是以post方式发送,那么表单中的数据会放在请求报文体中,发送到服务端.但是如果是以get方式提交表单,那么表单中用户输入的数据都是以URL地址的方式发送到服务端. 2:在服务端接收数据时 ...
- 修改EF的默认约定模型的方式
EF默认使用约定的模型,但是有时类不遵从约定,我们需要能够执行进一步的配置.对此有两种方法:数据注释和Fluent API 注释 class User { [Key] public int Key{ ...
- oracle 数据库 分割字符串返回结果集函数
CREATE OR REPLACE FUNCTION "UFN_SPLIT" ( p_list varchar2, p_sep varchar2 := ',' ...
- C#中Byte转换相关的函数
1.将一个对象转换为byte对象 public static byte GetByte(object o) { ; if (o != null) { byte tmp; if (byte.TryPar ...
- 整理 C#(同步调用、异步调用、异步回调)
//闲来无事,巩固同步异步方面的知识,以备后用,特整理如下: class Program { static void Main(string[] args) { //同步调用 会阻塞当前线程,一步一步 ...
- jvm的client和server
最近研究c++代码调用java的jar,发现64位的下的jvm在server路径,而32位的jvm则存在client路径下面,于是十分好奇,查了下,这里做个记录 JVM Server模式与client ...