最近项目里面需要自定义tabbar,需要定义成这样
说说实现方法吧:
1、自定义一个view【继承自UIView】,高度与系统的高度一致(tabbar系统默认是49)
我是直接将自定义的tabbar添加到系统的tabbar,但是这么做的话,中间按钮凸出来的部分始终无法响应事件,即使实现了hitTest方法。
2、于是就想到了直接修改系统的tabbar的高度,然后自定义tabbar的高度还是默认为49,让中间按钮完全在父视图内,这样的话,中间按钮的事件响应就没有问题了。
具体怎么做的呢?
A、创建一个继承UITabBar的文件
/** 增加TabBar的高度 30 */
staic CGFloat increaseTabBarHeight = 30;
-(instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
self.backgroundColor = [UIColor clearColor];
}
return self;
}
//设置TabBar的子视图颜色
-(void)layoutSubviews{
for (UIView *view in self.subviews) {
view.backgroundColor = [UIColor clearColor];
}
}
//调整高度的核心方法
-(CGSize)sizeThatFits:(CGSize)size{
CGSize sizeThatFits = [super sizeThatFits:size];
NSLog(@"添加前tabbar= %f",sizeThatFits.height);
//根据你的设计稿的需要,可以写成固定的值,我下面的写法是考虑到所有机型都在默认的高度上增加15
sizeThatFits.height= sizeThatFits.height+increaseTabBarHeight;
NSLog(@"添加后tabbar= %f",sizeThatFits.height);
return sizeThatFits;
}
B:来到UITabBarController,同时遇到导入#import <objc/runtime.h>
在viewDidLoad方法里面实现一下
//使用运行时替换系统的
object_setClass(self.tabBar, [ZYCustomTabBar class]);
//去掉原生tabbar分割线
[self.tabBar setShadowImage:[UIImage new]];
[self.tabBar setBackgroundImage:[UIImage new]];
//添加自定义customTabBar到系统tabBar上面
[self.tabBar addSubview:self.customTabBar];
C:到此就已经实现了调整tabBar