学习笔记 ---UITabBarController

UITabBarController是开发中非常常见的一种控制器,使用频率也很高,可以使用系统自带的,也可以通过修改tabbar来自定义。

此处记录一下系统的UITabBarController的使用以及注意点,这只是我个人使用时的记录,仅供参考。

层级关系

UITabBarController底部是系统的tabBar,tabBar包含了和子控制器个数相同的UITabBarItem,UITabBarItem的属性可以通过子控制器本身来设置,下面会详细介绍这些属性。

首先添加自控制器,并且设置初始化tabBarItem基本属性

-(void)addChildControllers{
    HomeViewcontroller *home = [[HomeViewcontroller alloc] init];
    MessageViewController *message = [[MessageViewController alloc] init];
    MineViewcontroller *mine = [[MineViewcontroller alloc] init];
    APPlicationController *applection = [[APPlicationController alloc] init];
    MindleController *mindle = [[MindleController alloc] init];
    [self setChildController:home image:[self setOriginImage:[UIImage imageNamed:@"homepage"]] selectImage:[self setOriginImage:[UIImage imageNamed:@"homepageSelected"]] title:@"首页"];
    [self setChildController:message image:[self setOriginImage:[UIImage imageNamed:@"message"]] selectImage:[self setOriginImage:[UIImage imageNamed:@"messageSelected"]] title:@"消息"];
    [self setChildController:mindle image:[self setOriginImage:[UIImage imageNamed:@"setQuestion"]] selectImage:[self setOriginImage:[UIImage imageNamed:@"setQuestion"]] title:nil];
    [self setChildController:mine image:[self setOriginImage:[UIImage imageNamed:@"mall"]] selectImage:[self setOriginImage:[UIImage imageNamed:@"mallSelected"]] title:@"我的"];
    [self setChildController:applection image:[self setOriginImage:[UIImage imageNamed:@"statistics"]] selectImage:[self setOriginImage:[UIImage imageNamed:@"statisticsSelected"]] title:@"统计"];
}
-(void)setChildController:(UIViewController*)vc image:(UIImage*)image selectImage:(UIImage*)selectImage title:(NSString*)title{
    //item未选中时的Image
    vc.tabBarItem.image = image;
    //item 选中时的image
    vc.tabBarItem.selectedImage = selectImage;
    //item的标题
    vc.tabBarItem.title = title;
    //控制器的标题,如果没有设置 vc.tabBarItem.title ,item的标题也是这个title
    vc.title = title;
    if ([vc isMemberOfClass:[MindleController class]]) {
        //修改图片的位置属性时,不要通过下面注释的方法,用这方法拿到的item设置image位置属性时无效
//        UITabBarItem *mindleItem = self.tabBar.items [2];
//        mindleItem.imageInsets = UIEdgeInsetsMake(0, -10, -6, -10);
        vc.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0);
    }
    [self addChildViewController:[[MineNavigationController alloc] initWithRootViewController:vc]];
}
//保持图片原样
-(UIImage*)setOriginImage:(UIImage*)image{
    image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    return image;
}

tabBarItem常用基础属性

   //item未选中时的Image
    vc.tabBarItem.image = image;

    //item 选中时的image
    vc.tabBarItem.selectedImage = selectImage;

    //item的标题
    vc.tabBarItem.title = title;

    //控制器的标题,如果没有设置 vc.tabBarItem.title ,item的标题也是这个title
    vc.title = title;

   //修改图片的位置属性时,不要通过下面注释的方法,用这方法拿到的item设置image位置属性时无效
   // UITabBarItem *mindleItem = self.tabBar.items [2];
   // mindleItem.imageInsets = UIEdgeInsetsMake(0, -10, -6, -10);

   //可以通过调整imageInsets的值来设置类似新浪微博中间加号的效果
    vc.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0);

  //设置指定itme的tittle的横竖的偏移量(水平的我试了一下好像没有效果)正数是向下偏移
  [mindleItem setTitlePositionAdjustment:UIOffsetMake(0, 20)];

  //可以通过此方法来设置item的字体,颜色,大小等。颜色也可以通过tabBar的属性来设置。
  - (void)setTitleTextAttributes:(nullable NSDictionary<NSString *,id>   *)attributes forState:(UIControlState)state

tabBar的基础属性

   //设置item的title的选中颜色(直接设置会使得图片也会被渲染成指定的颜色)
    self.tabBar.tintColor = [UIColor redColor];
    
    //设置tabBar的背景色
    self.tabBar.barTintColor = [UIColor yellowColor];
    
    //设置item的title的未选中状态颜色(直接设置会使得图片也会被渲染成指定的颜色)
    self.tabBar.unselectedItemTintColor = [UIColor lightGrayColor];
    
    //设置item选中时的背景图片
    self.tabBar.selectionIndicatorImage = [UIImage imageNamed:@"c8b5d3679cedc1df9933df4720b71c76"];
    
    //设置tabBar的背景图片(最好将图片高度设置为49)
    self.tabBar.backgroundImage = [UIImage imageNamed:@"16ef45ad5993444ee1c9b0523b882040"];
    
    //设置tabBar最上面的那个像素的图片(此属性必须和backgroundImage属性一起使用,否则无效)
    self.tabBar.shadowImage = [UIImage imageNamed:@"c03314d5eed9281b96accc5a9e226227"];

self.tabBar.shadowImage图片的效果图,粉色部分就是,如果不设置backgroundImage则没有效果。

屏幕快照 2017-05-31 下午2.05.44.png

直接使用self.tabBar.tintColor或者self.tabBar.unselectedItemTintColor会将图片也渲染,设置self.tabBar.tintColor为红色时,图片也被渲染成红色。

屏幕快照 2017-05-31 下午1.50.54.png

使用下面方法可以恢复图片原来的颜色

-(UIImage*)setOriginImage:(UIImage*)image{
    image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    return image;
}

导航栏中跳转界面时如何隐藏tabBar

也没什么好说的就是调用控制器的hidesBottomBarWhenPushed 属性
在自定义的导航控制器中重写下面方法即可。

  override func pushViewController(_ viewController: UIViewController, animated: Bool) {
        print(self.viewControllers.count)
        if self.viewControllers.count==1 {
           viewController.hidesBottomBarWhenPushed  = true
        }
        super.pushViewController(viewController, animated: animated)
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容