自定义UITabBar,重新设置tabBarButton的fra

作者: 冷洪林 | 来源:发表于2016-10-28 11:43 被阅读214次
很多时候系统自带的tabBar不能满足我们的需求,这时我们就需要自定义tabBar,自定义tabBar步骤:
  • 创建一个LHLTabBar继承自系统的UITabBar


  • 在LHLTabBarController使用自定义的tabBar
    LHLTabBar *tabBar = [[LHLTabBar alloc] init];
    [self setValue:tabBar forKeyPath:@"tabBar"];
这里需要注意:

由于系统的tabBar是readOnly的,所以我们需要利用KVC对系统的tabBar进行赋值: KVC的原理是通过访问属性进行赋值,不是通过setter方法进行赋值

  • 使用自定义的tabBar后,我们还需要验证一点,tabBar的tabBarButton是在什么时候添加的,如果在自定义之前就添加了,那么我们的自定义就毫无意义了,接下来在viewDidLoad和viewWillAppear两个方法中打印tabBar的tabBarButton:


从打印结果可看出,tabBar添加子控件按钮是在viewDidLoad之后,所以我们可以在viewDidLoad中自定义tabBar
  • 自定义tabBar之后就应该在LHLTabBar中布局子控件了:plusButton是根据需求需要自定义的中间按钮,此处采用懒加载的方式
// 懒加载
- (UIButton *)plusButton{
    if (_plusButton == nil) {
        UIButton *plusButton = [UIButton buttonWithType:UIButtonTypeCustom];
        [plusButton setBackgroundImage:[UIImage imageNamed:@"tabBar_publish_icon"] forState:UIControlStateNormal];
        [plusButton setBackgroundImage:[UIImage imageNamed:@"tabBar_publish_click_icon"] forState:UIControlStateHighlighted];
        [plusButton sizeToFit];
        [self addSubview:plusButton];
        _plusButton = plusButton;
    }
    return _plusButton;
}

- (void)layoutSubviews
{
    [super layoutSubviews];
    
    // 布局子控件
    NSInteger count = self.items.count + 1;
    CGFloat btnW = self.frame.size.width / count;
    CGFloat btnH = self.frame.size.height;
    
    NSInteger i = 0;
    for (UIButton *tabBarButton in self.subviews) {
        // 取出UITabBarButton
        if ([tabBarButton isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
            if (i == 2) {
                i += 1;
            }
            tabBarButton.frame = CGRectMake(btnW * i, 0, btnW, btnH);
            i++;
        }
        
    }
    
    // plusButton
    self.plusButton.center = CGPointMake(self.frame.size.width * 0.5, self.frame.size.height * 0.5);
}

  • 到此自定义的tabBar就完成了,效果图:

最后把demo连接放上来,有需要的小伙伴可以下载哦,嘿嘿https://github.com/lenglengiOS/BuDeJie_1

相关文章

网友评论

    本文标题:自定义UITabBar,重新设置tabBarButton的fra

    本文链接:https://www.haomeiwen.com/subject/huxeuttx.html