push页面时,可调用hidesBottomBarWhenPushed进行隐藏。

第一步,我们需要一些图片:

各个选项的图标和tabbar的背景图片,最后还要一个透明的1x1像素的图片。

第二步,新建一个工程,在工程内建一个继承于UITabBarController的类。

第三步,首先写一个方法,返回一个UINavigationController

  1. -(UINavigationController*) viewControllerWithTitle:(NSString*) title image:(UIImage*)image
  2. {
  3. UIViewController* viewController = [[UIViewController alloc] init];
  4. viewController.tabBarItem = [[UITabBarItem alloc] initWithTitle:title image:image tag:0];
  5. viewController.title = title;
  6. UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:viewController];
  7. return nav;
  8. }

然后在viewDidLoad里面创建TabbarController的viewControllers

  1. self.viewControllers = [NSArray arrayWithObjects:
  2. [self viewControllerWithTitle:@"1" image:IMG(@"1")],
  3. [self viewControllerWithTitle:@"2" image:IMG(@"2")],
  4. [self viewControllerWithTitle:nil image:nil],
  5. [self viewControllerWithTitle:@"3" image:IMG(@"3")],
  6. [self viewControllerWithTitle:@"4" image:IMG(@"4")], nil nil];

看到没有,比较猥琐的就是第三个ViewController什么都没设置。

因为我们要在那个位置放一个自己的按钮,继续在viewDidLoad写:

  1. UIButton* button = [[UIButton alloc]initWithFrame:CGRectMake(0.0, 0.0, 65, 65)];
  2. button.center = CGPointMake(160, 20);
  3. [button setBackgroundImage:IMG(@"add") forState:UIControlStateNormal];
  4. [button addTarget:self action:@selector(add:) forControlEvents:UIControlEventTouchUpInside];
  5. [self.tabBar addSubview:button];

然后设置背景图片:

  1. [self.tabBar setBackgroundImage:IMG(@"tabbarbg")];

运行之后是这样的:

会发现按钮上面有一条横线,然后再设置这个阴影运行后就没有人发现你猥琐的行径。

  1. [self.tabBar setShadowImage:IMG(@"transparent")];

最后效果图(iOS7和iOS6):

这样做的好处:

在ViewController里push页面的时候可调用hidesBottomBarWhenPushed的属性进行隐藏。

(转)自定义UITabBar的更多相关文章

  1. 自定义UITabBar的两种方式

    开发中,经常会遇到各种各样的奇葩设计要求,因为apple提供的UITabBar样式单一,只是简单的"图片+文字"样式,高度49又不可以改变.自定义UITabBar成为了唯一的出路. ...

  2. iOS之自定义UITabBar替换系统默认的(添加“+”号按钮)

    自定义UITabBar替换系统默认的,目的是为了在UITabBar中间位置添加一个“+号按钮”,下面我们来聊聊具体的实现. 1.自定义WBTabBar,让其继承自UITabBar,代码如下: // / ...

  3. ios基础篇(九)——自定义UITabBar

    上一篇讲到了UITabBarViewController,接着说说UITabBarViewController中怎么自定义TabBar. 今天仿写了微博,发现底部tabbar中间的button和其他有 ...

  4. 关于iOS自定义UITabBar的几种方法

    作为iOS开发最常用的两个多视图控制器 NavigationController 和 TabBarController 已经很强大了,基本上在大部分的应用中都能看到它们的影子.但是在使用的过程中,系统 ...

  5. iOS项目——自定义UITabBar与布局

    在上一篇文章iOS项目——基本框架搭建中,我们详细说明了如何对TabBarItem的图片属性以及文字属性进行一些自定义配置.但是,很多时候,我们需要修改TabBarItem的图片和文字属性之外,还需要 ...

  6. UITabBarController中自定义UITabBar

    1.创建多个视图控制器,放如UITabBarController中 AViewController *aa = [[AViewController alloc] init]; UINavigation ...

  7. iOS中 UITabBarController中自定义UITabBar

    1.创建多个视图控制器,放如UITabBarController中 AViewController *aa = [[AViewController alloc] init]; UINavigation ...

  8. iOS 自定义UITabBar

    推荐一篇非常好的集成各种UITabBar的三方库 <点击这里直取demo> 另外一篇根据runtime定制了一款可以出轨的UITarBar <Runtime实战之定制TabBarIt ...

  9. 利用kvc对UITabBar上的UITabBarButton的尝试修改.md

    一.前言 一次比较懒的想法,不想自定义UITabBar,也不想用第三方框架,于是想尝试修改苹果私有类来达到部分效果 效果如下 点击tabBar 上的按钮,图片有变大再变小的动画 tabBar 上某个按 ...

随机推荐

  1. jave之set和get的用法

    package com.xxl.api.admin; public class Test { private int score; public int getScore() { return sco ...

  2. Tinghua Data Mining 5

    ID3 ID3算法倾向于分的很细的变量 C4.5加入分母为惩罚量

  3. centos下gitlab的简单安装配置

    一.安装前配置yum源 #wget https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh #s ...

  4. shell脚本解析json文件

    安装jq扩展 下载:jq 根据自己系统下载对应的文件 cp jq-linux64 /usr/bin cd /usr/bin mv jq-linux64 jq chmod +x jq 使用方法 假设有个 ...

  5. IO多路复用机制(转)

    1.简介 希望通过这篇文章,可以回答以下几个问题? 为什么需要IO多路复用? 什么是IO多路复用机制? IO多路复用的机制该怎么使用? epoll比select/poll相比,优势在哪里? 在了解I/ ...

  6. Ubuntu启动项

    原文地址:http://blog.163.com/yangshuai126%40126/blog/static/1734262652010928101641555/ Ubuntu开机之后会执行/etc ...

  7. java.lang.IllegalArgumentException: name MUST NOT NULL! at org.nutz.dao.impl.NutDao.fetch

    Nutz传值报错问题 作者:Vashon 时间:20150902 平台:Nutz框架 Java后台方法中拿值时报的错 报错信息: java.lang.IllegalArgumentException: ...

  8. HDU 4291 A Short problem 短问题 (递推,找规律)

    题意: 给出递推式 g(n) = 3g(n - 1) + g(n - 2),且g(1) = 1,g(0) = 0.求g( g( g(n))) mod 109 + 7. 思路: 要求的g( g( g(n ...

  9. struts2默认拦截器defaultStack

    第一次使用Struts2.3.20,前台页面向后台传值,怎么总是提示值为null,查找半天原来是struts配置文件的action中忘记引入defaultStack拦截器了,所以即使Action中万事 ...

  10. 51nod 1276 1276 岛屿的数量 (很好玩的题目

    题意: 有N个岛连在一起形成了一个大的岛屿,如果海平面上升超过某些岛的高度时,则这个岛会被淹没.原本的大岛屿则会分为多个小岛屿,如果海平面一直上升,则所有岛都会被淹没在水下. 给出N个岛的高度.然后有 ...