自定义tabBar
Posted iFat的笔记本
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义tabBar相关的知识,希望对你有一定的参考价值。
@implementation XMGTabBarController /* 问题: 1.选中按钮的图片被渲染 -> ios7之后默认tabBar上按钮图片都会被渲染 1.修改图片 2.通过代码 √ 2.选中按钮的标题颜色:黑色 标题字体大 -> 对应子控制器的tabBarItem √ 3.发布按钮显示不出来 分析:为什么其他图片可以显示,我的图片不能显示 => 发布按钮图片太大,导致显示不出来 1.图片太大,系统帮你渲染 => 能显示 => 位置不对 => 高亮状态达不到 解决:不能修改图片尺寸, 效果:让发布图片居中 2.如何解决:系统的TabBar上按钮状态只有选中,没有高亮状态 => 中间发布按钮 不能用系统tabBarButton => 发布按钮 不是 tabBarController子控制器 1.自定义tabBar */ #pragma mark - 生命周期方法 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. // 1 添加子控制器(5个子控制器) -> 自定义控制器 -> 划分项目文件结构 [self setupAllChildViewController]; // 2 设置tabBar上按钮内容 -> 由对应的子控制器的tabBarItem属性 [self setupAllTitleButton]; // 3.自定义tabBar [self setupTabBar]; // tabBar上按钮并不是在viewDidLoad添加的 } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; NSLog(@"%@",self.tabBar.subviews); } #pragma mark - 自定义tabBar - (void)setupTabBar { XMGTabBar *tabBar = [[XMGTabBar alloc] init]; // self.tabBar = tabBar; [self setValue:tabBar forKey:@"tabBar"]; }
XMGTabBar.h
#import <UIKit/UIKit.h> @interface XMGTabBar : UITabBar @end
XMGTabBar.m
#import "XMGTabBar.h" @interface XMGTabBar () @property (nonatomic, weak) UIButton *plusButton; @end @implementation XMGTabBar - (UIButton *)plusButton { if (_plusButton == nil) { UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; [btn setImage:[UIImage imageNamed:@"tabBar_publish_icon"] forState:UIControlStateNormal]; [btn setImage:[UIImage imageNamed:@"tabBar_publish_click_icon"] forState:UIControlStateHighlighted]; [btn sizeToFit]; [self addSubview:btn]; _plusButton = btn; } return _plusButton; } - (void)layoutSubviews { [super layoutSubviews]; // 跳转tabBarButton位置 NSInteger count = self.items.count; CGFloat btnW = self.bounds.size.width / (count + 1); CGFloat btnH = self.bounds.size.height; CGFloat x = 0; int i = 0; // 私有类:打印出来有个类,但是敲出来没有,说明这个类是系统私有类 // 遍历子控件 调整布局 for (UIView *tabBarButton in self.subviews) { if ([tabBarButton isKindOfClass:NSClassFromString(@"UITabBarButton")]) { if (i == 2) { i += 1; } x = i * btnW; tabBarButton.frame = CGRectMake(x, 0, btnW, btnH); i++; } } // 调整发布按钮位置 self.plusButton.center = CGPointMake(self.bounds.size.width * 0.5, self.bounds.size.height * 0.5); } @end
以上是关于自定义tabBar的主要内容,如果未能解决你的问题,请参考以下文章