tabBar中间的发布按钮
新建一个继承UITabBar的类
重写UITabBar的layoutSubViews方法
先遍历所有的subviews,获取类名为UITabBarButton的按钮,把他们的位置重新设置,把中间的位置空出来给发布按钮
刘海屏的tabbar高度为83,判断高度是否超过80,如果超过80,需要设置到高度显示按钮
// 布局子控件
-(void)layoutSubviews{
[super layoutSubviews];
// 设置按钮的宽度为整个tabbar宽度的五分之一
CGFloat buttonW = self.frame.size.width / 5;
CGFloat buttonH = self.frame.size.height;
// 判断是否时刘海屏幕的tabbar高度
if (buttonH > 80) {
buttonH = buttonH-30;
}
CGFloat buttonY = 0;
int buttonIndex = 0;
for (UIView* subview in self.subviews) {
// 过滤非UITabBarBtton
// if(![@"UITabBarBtton" isEqualToString:NSStringFromClass(subview.class)]) continue;
if(subview.class != NSClassFromString(@"UITabBarButton")) continue;
CGFloat buttonX = buttonIndex * buttonW;
// 判读是否是第三个或第四个按钮,把中间的位置腾出来
if(buttonIndex >= 2){
buttonX += buttonW;
}
// 设置具体按钮的位置
subview.frame = CGRectMake(buttonX, buttonY, buttonW, buttonH);
buttonIndex++;
}
// 设置中间按钮的位置和中心位置
self.publishButton.frame = CGRectMake(0,0,buttonW, buttonH);
self.publishButton.center = CGPointMake(self.frame.size.width/2, buttonH/2);
}
替换tabBar
在tabbar视图控制器创建tabbar之后使用我们重写layoutSubviews方法
因为self.tabBar是只读属性,所以我们要使用setValue: forKeyPath: 替换原有的tabBar为我们重新layoutSubviews
[self setValue:[[CHHUITabBar alloc]init] forKeyPath:@"tabBar"];