iOS自定义tabbar(没有tabbar上的黑线)

自定义tabbar相信在很多项目中都要用到。有的时候 还需要那种 不规则的tabbar,例如中间高两边底,例如需要添加tabbar的背景图片等等。这里 我要介绍一种 自定义tabbar的方法 ,这种方法可以调用系统的 hidesBottomBarWhenPushed 方法,很方便的隐藏tabbar。

话不多说开始正文。

第一步:
首先创建 tabbarViewController 继承自 UITabBarController

第二步:
装载视图控制器 上代码

//装载视图
-(void)addViewController
{
    UIViewController * vc1 = [[UIViewController alloc]init];
    vc1.view.backgroundColor = [UIColor redColor];
    vc1.title = @"收益权";
    UINavigationController * nvc1 = [[UINavigationController alloc]initWithRootViewController:vc1];

    ViewController * vc2 = [[ViewController alloc]init];
    UINavigationController * nvc2 = [[UINavigationController alloc]initWithRootViewController:vc2];
    vc2.view.backgroundColor = [UIColor blueColor];
    vc2.title = @"个人中心";

    ViewController * vc3 = [[ViewController alloc]init];
    UINavigationController * nvc3 = [[UINavigationController alloc]initWithRootViewController:vc3];
    vc3.view.backgroundColor = [UIColor lightGrayColor];
    vc3.title = @"论坛";
    self.viewControllers = @[nvc1,nvc2,nvc3];
}

第三部 自定义tabbar

-(void)customTab
{
    //这里是去掉 系统tabbar上黑线的方法
    self.tabBar.backgroundImage = [[UIImage alloc]init];
    self.tabBar.shadowImage = [[UIImage alloc]init];

    UIImageView * image = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, ScreenWidth, 49)];
    image.backgroundColor = [UIColor grayColor];
    image.userInteractionEnabled = YES;
    [self.tabBar addSubview:image];

    for (int i = 0;  i<3 ; i++) {
        UIButton * btn = [[UIButton alloc]initWithFrame:CGRectMake(ScreenWidth/3 *i +10, 5, ScreenWidth/4, 30)];
        if(i == 1)
        {
            btn.frame = CGRectMake(ScreenWidth/3 *i, -11, ScreenWidth/3, 60);
        }
        switch (i) {
            case 0:
                btn.backgroundColor = [UIColor redColor];
                break;
            case 1:
                btn.backgroundColor = [UIColor yellowColor];
                break;
            case 2:
                btn.backgroundColor = [UIColor blueColor];
                break;
            default:
                break;
        }
        btn.tag = i ;
        [btn addTarget:self action:@selector(toudown:) forControlEvents:UIControlEventTouchDown];
        [image addSubview:btn];
    }
}

不要玩了 btn的点击事件方法

-(void)toudown:(UIButton *)btn
{
    self.selectedIndex = btn.tag;
}

可以看到 自定义的tabbar 上
背景图片是一张 UIImageView ,你想要什么背景 直接找 UI 美眉要就好了。
tabbar上的 三个按钮 你想要什么样式的都行,UI切图就好了。

第四步: 完成

- (void)viewDidLoad {
    [super viewDidLoad];
    [self addViewController];
    [self customTab];
}

在viewDidLoad里 条用这连个方法就好了。

最后附上 github 源码
https://github.com/lwq718691587/custom-tabbar

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS自定义 TabBar 主要分为以下几个步骤: 1. 创建自定义 TabBar 创建一个继承于 UITabBar 的类,重写初始化方法和 layoutSubviews 方法,实现自定义 TabBar 的样式和布局。 2. 实现自定义 TabBarItem 创建一个继承于 UIButton 的类,用于实现自定义TabBarItem 样式,例如添加图片、文字等。 3. 设置自定义 TabBarItem 在自定义 TabBar 的初始化方法中,添加自定义TabBarItem,将其添加到 TabBar 上。 4. 替换系统 TabBar 在 AppDelegate 中,找到 TabBarController 的 tabBar 属性,将其替换为自定义TabBar。 示例代码: 自定义 TabBar 类: ``` class CustomTabBar: UITabBar { var items: [CustomTabBarItem] = [] override init(frame: CGRect) { super.init(frame: frame) setup() } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } private func setup() { // 隐藏默认的 TabBar self.tintColor = .clear self.backgroundImage = UIImage() self.shadowImage = UIImage() self.backgroundColor = .white } override func layoutSubviews() { super.layoutSubviews() // 设置自定义 TabBarItem 的布局 let itemWidth = self.frame.size.width / CGFloat(items.count) var itemIndex: CGFloat = 0 for item in items { item.frame = CGRect(x: itemWidth * itemIndex, y: 0, width: itemWidth, height: self.frame.size.height) itemIndex += 1 } } } ``` 自定义 TabBarItem 类: ``` class CustomTabBarItem: UIButton { var title: String? var normalImage: UIImage? var selectedImage: UIImage? override init(frame: CGRect) { super.init(frame: frame) setup() } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } private func setup() { // 设置 TabBarItem 的样式 self.imageView?.contentMode = .scaleAspectFit self.titleLabel?.font = UIFont.systemFont(ofSize: 12) self.setTitleColor(.gray, for: .normal) self.setTitleColor(.black, for: .selected) } override func layoutSubviews() { super.layoutSubviews() // 设置 TabBarItem 的布局 let imageHeight = self.frame.size.height * 0.6 self.imageView?.frame = CGRect(x: (self.frame.size.width - imageHeight) / 2, y: 5, width: imageHeight, height: imageHeight) self.titleLabel?.frame = CGRect(x: 0, y: self.frame.size.height - 20, width: self.frame.size.width, height: 20) } func set(title: String?, normalImage: UIImage?, selectedImage: UIImage?) { self.title = title self.normalImage = normalImage self.selectedImage = selectedImage // 设置 TabBarItem 的标题和图片 self.setTitle(title, for: .normal) self.setImage(normalImage, for: .normal) self.setImage(selectedImage, for: .selected) } } ``` 在自定义 TabBar 的初始化方法中,添加自定义TabBarItem: ``` class CustomTabBar: UITabBar { var items: [CustomTabBarItem] = [] override init(frame: CGRect) { super.init(frame: frame) setup() // 添加 TabBarItem let item1 = CustomTabBarItem() item1.set(title: "首页", normalImage: UIImage(named: "home_normal"), selectedImage: UIImage(named: "home_selected")) self.addSubview(item1) items.append(item1) let item2 = CustomTabBarItem() item2.set(title: "消息", normalImage: UIImage(named: "message_normal"), selectedImage: UIImage(named: "message_selected")) self.addSubview(item2) items.append(item2) let item3 = CustomTabBarItem() item3.set(title: "我的", normalImage: UIImage(named: "mine_normal"), selectedImage: UIImage(named: "mine_selected")) self.addSubview(item3) items.append(item3) } // ... } ``` 在 AppDelegate 中,找到 TabBarController 的 tabBar 属性,将其替换为自定义TabBar: ``` func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // ... let tabBarController = UITabBarController() tabBarController.viewControllers = [viewController1, viewController2, viewController3] // 替换为自定义 TabBar let customTabBar = CustomTabBar(frame: tabBarController.tabBar.frame) tabBarController.setValue(customTabBar, forKey: "tabBar") // ... return true } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值