iOS 隐藏系统的tabbar后,tabbar所在frame区域不可点击问题

本文介绍了如何在iOS应用中自定义TabBar样式并解决隐藏系统TabBar后,其所在区域不可点击的问题。通过在TabBar上方添加自定义视图并调整系统TabBar的frame,在控制器进入和退出时控制自定义TabBar的显示和隐藏,实现了在导航控制器中平滑切换时隐藏和显示TabBar的效果。示例代码详细展示了实现这一功能的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统自带的UITabBarController有时候到不到要求,需要自定义样式。

有一种方法就是在TabBar上面在放一层自己的,正好把原来的遮住。

那么,从Tab进入子的Controller想要隐藏TabBar怎么办呢?

假如说你是用 TabBar + Navigation来做的,从第一个Tab——TabBar1进入子Controller(称作A),

逻辑很简单,就是从TabBar1点击进入A,

你需要在TabBar1点击事件(A显示之前)加上

self.hidesBottomBarWhenPushed = YES;

然后在A的viewWillAppear中把你自己自定义,也就是覆盖在系统TabBar上面的东西隐藏;

在viewWillDisappear中再将其显示就可以了。

示例代码如下:

点击事件:


    TabNoticeController *vc = [[TabNoticeController alloc] init];

    self.hidesBottomBarWhenPushed = YES;

    [self.navigationController pushViewController:vc animated:YES];

 

A中的代码:


- (void)viewWillAppear:(BOOL)animated {

    [xxxTabBar setTabBarHidden:YES];

}

- (void)viewWillDisappear:(BOOL)animated {

    [xxxTabBar setTabBarHidden:NO];

}



// 隐藏tabar的时候,有两种方法,一种是在压栈前,设置 hidesBottomBarWhenPushed 为 YES

   
   另一种是用代码实现效果
   - (void)viewWillAppear:(BOOL)animated {


    [super viewWillAppear:animated];

    [self hideTabBar:YES];//隐藏tabbar

}

- (void)viewWillDisappear:(BOOL)animated {


    [super viewWillDisappear:animated];

    [self hideTabBar:NO];//显示tabbar

}

实现方法如下:

 

- (void) hideTabBar:(BOOL) hidden {

    

    [UIView beginAnimations:nil context:NULL];

    [UIView setAnimationDuration:0];

    

    for(UIView *view in self.tabBarController.view.subviews)

    {

        if([view isKindOfClass:[UITabBar class]])

        {

            if (hidden) {

                [view setFrame:CGRectMake(view.frame.origin.x480, view.frame.size.width, view.frame.size.height)];

            } else {

                [view setFrame:CGRectMake(view.frame.origin.x480-49, view.frame.size.width, view.frame.size.height)];

            }

        } 

        else 

        {

            if (hidden) {

                [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width480)];

            } else {

                [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width480-49)];

            }

        }

    }


    [UIView commitAnimations];

}

其中 480 根据情况设置,我这里连  UINavigationBar  也隐藏了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值