有时候APP会有标题这样的需求,看了一些demo 感觉实现的都比较复杂(当然人家写的都是很精致的),于是自己就用简单的方法实现了下基本的需求.
效果如图:
具体实现通过自定义UITabBarController和UITabBar
如下图:
在TabBarController中将系统的TabBar指向我们定义的
代码如下:
WJTabBar *bar =[WJTabBar new];
[self setValue:bar forKey:@"tabBar"];
然后在Tabbar中申明自定义的按钮
@property(nonatomic,weak) UIButton *customCenterButton;
实现思路是:首先判断是否有自定义的按钮 如果有的话就重新布局tabbar的UITabBarButton位置 如果没有就不改变。
通过Xcode的界面分析,可以看到TabBar下面的SubView,我们需要改变的是UITabBarButton。
剩下的就是怎么布局的问题,在layoutSubviews中重新布局,代码如下:
到这里基本上能实现需求,但是当自定义的按钮高度超过Tabbar的时候,超过的部分是无法响应点击事件的,解决方法也很简单,如下代码
//让超过tabbar高度的部分也能点击
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
if (_customCenterButton) {
//如果点击的点位于_customCenterButton内就返回_customCenterButton
if (CGRectContainsPoint(_customCenterButton.frame, point)) {
return _customCenterButton;
}
}
return [super hitTest:point withEvent:event];
}
到这基本能满足大部分的需求了,