ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## 一:效果图 自定义tabBar实现最下面中间的添加按钮  ![](https://box.kancloud.cn/2016-01-20_569f1d9851330.jpg) ## 二:思路 首先在自己的tabBarController中把系统的tabBar设置成自己的tabBar(NYTabBar),这里由于tabBar的属性是readonly的,所以我们要用kvc或者是消息管理来设置他 然后就写自己的NYTabBar。这个写起来首先 遍历当前tabBar上的所有view,如果是UITabBarButton,就取出来重新设置他们的位置,并且重新赋值,接下来就是空出中间的添加的位置,然后把添加按钮放上去,就ok了。 ## 三:代码 ### 调用 首先是如何调用的代码 ~~~ //自定义tabBar NYTabBar *tabBar = [[NYTabBar alloc]initWithFrame:self.tabBar.frame]; //用kvc把readly的tabBar属性改成自定义的 [self setValue:tabBar forKey:@"tabBar"]; ~~~ ### NYTabBar.m NYTabBar.h文件就不写了 ,里面啥都没有 NYTabBar.m: ~~~ // // NYTabBar.m // 猫猫微博 // // Created by apple on 15-7-24. // Copyright (c) 2015年 znycat. All rights reserved. // #import "NYTabBar.h" @interface NYTabBar() /** * 添加增加按钮 */ @property (nonatomic, weak) UIButton *addButton; @end @implementation NYTabBar -(UIButton *)addButton { if (_addButton == nil) { UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; [btn setImage:[UIImage imageNamed:@"tabbar_compose_icon_add"] forState:UIControlStateNormal]; [btn setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button"] forState:UIControlStateNormal]; [btn setImage:[UIImage imageNamed:@"tabbar_compose_icon_add_highlighted"] forState:UIControlStateHighlighted]; [btn setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button_highlighted"] forState:UIControlStateHighlighted]; _addButton = btn; //是按钮的尺寸默认跟背景图片一样大 [btn sizeToFit]; [self addSubview:_addButton]; } return _addButton; } //调整子空间的位置 -(void)layoutSubviews { [super layoutSubviews]; CGFloat w = self.bounds.size.width; CGFloat h = self.bounds.size.height; CGFloat btnX = 0; CGFloat btnY = 0; CGFloat btnW = w / 5; CGFloat btnH = h; int i = 0; //1 , 遍历当前tabBar上的所有view for (UIView *tabBarBtn in self.subviews) { //2,如果是UITabBarButton,就取出来重新设置他们的位置 if ([tabBarBtn isKindOfClass:NSClassFromString(@"UITabBarButton")]) { btnX = i * btnW; tabBarBtn.frame = CGRectMake(btnX, btnY, btnW, btnH); //当到了第二个时候,再加一个位置空竹添加按钮的位置。 if (i==1) { i++; } i++; } } //设置添加按钮 add按钮的位置 self.addButton.center = CGPointMake(w * 0.5, h * 0.5); } @end ~~~ ## 四:补充 调用的时候还可以用消息管理 ~~~ //自定义tabBar NYTabBar *tabBar = [[NYTabBar alloc]initWithFrame:self.tabBar.frame]; /*这个地方还有一种用消息管理设置的,这样也可以,使用个步骤是 1:先导入头文件#import <objc/message.h> 2:到项目中Build Settings中查找msg ,然后把yes改成no 3:代码写objc_msgSend调用就行了 注意:这样的方法框架中比较多,目的为了不让人看懂,还有显得c牛逼,——————没啥鸟用。。 */ //用消息管理设置 objc_msgSend(self, @selector(setTabBar:),tabBar); ~~~ 步骤:  1:先导入头文件 ~~~ #import <objc/message.h> ~~~ 2:到项目中Build Settings中查找msg ,然后把yes改成no ![](https://box.kancloud.cn/2016-01-20_569f1d9866aff.jpg) 3:代码写objc_msgSend调用就行了  注意:这样的方法框架中比较多,目的为了不让人看懂,还有显得c牛逼,——————没啥鸟用。。