iOS 自定义tabbar 关于push问题 小技巧

本文介绍了在iOS开发中遇到自定义TabBar与pushViewController交互问题的解决方案。作者在实现自定义TabBar时,发现系统方法`hidesBottomBarWhenPushed=YES`无法正常工作。为了解决这个问题,尝试了网上多种方法但未成功。最后,通过改变应用的根控制器为NavigationController,并在自定义TabBar类中去除ViewController的导航控制器,实现了在push时避免影响TabBar的显示。这是一个简洁且有效的方法,对于觉得其他隐藏TabBar方式复杂的人可以参考。

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

      在开发的时候,相信大家都用过tabbar ,今天我在写项目的时候也用到了tabbar  紧着着一系列问题就来了


 需求:我的项目的主要框架是tabbar ,但是用系统的tabbar不美观

     于是我就自定义了我的tabbar,创建了一个类,继承自UITabBarController,在这个类中我将系统原生的tabbar隐藏了,就写了这样一句话,

 self.tabBar.hidden=YES;

    

        然后就是一系列的我们写得不能在熟的代码了,引入viewcontroller的头文件,然后实例化,将viewcontroller都做成带导航的,放到一个数组里,在将这个数组赋给tabbar·像这样  

    TrendFashionViewController *trend=[[TrendFashionViewController alloc] init];
//    UINavigationController *trendNa=[[UINavigationController alloc] initWithRootViewController:trend];
//    trendNa.navigationBarHidden=YES;
    LifeResourceViewController *left=[[LifeResourceViewController alloc] init];
//     UINavigationController *leftNa=[[UINavigationController alloc] initWithRootViewController:left];
//    leftNa.navigationBarHidden=YES;
    MaintainManageViewController *main=[[MaintainManageViewController alloc] init];
//     UINavigationController *mainNa=[[UINavigationController alloc] initWithRootViewController:main];
//    mainNa.navigationBarHidden=YES;
    PerfectSelfPhotoViewController *per=[[PerfectSelfPhotoViewController alloc] init];
//     UINavigationController *perNa=[[UINavigationController alloc] initWithRootViewController:per];
//    perNa.navigationBarHidden=YES;
    MicroSoundViewController *mir=[[MicroSoundViewController alloc] init];
//     UINavigationController *mirNa=[[UINavigationController alloc] initWithRootViewController:mir];
   // mirNa.navigationBarHidden=YES;
    NSArray *arr=[NSArray arrayWithObjects:trend,left,main,per,mir, nil];
    self.viewControllers=arr;

   紧接着就是自定义tabbar了,实现自己想要的效果,然后接着我就把这个自定义的tabbarcontroller 在appdelegate里面 做成root了,但是当我想要push到别的页面的时候,问题来了 用原来的命令

  self.navigationController.hidesBottomBarWhenPushed=YES;


 根本就不管用,原因在于 我的tabbar是我自定义的,所以这个命令自然就不生效了,对此我也在网上查了好多办法,有的说push 的时候将tabbar移除屏幕外 回来的时候在放回来,等等,试验了一下也没试出来,后来 我就想,干脆在appdelegate里面不用自定义的tabbar当根了,用navigationcontroller 当根,然后把自定义tabbar类里面的viewcontroller 的导航都去掉,不就OK 了,这样当我想push 的时候,什么烦恼都没有了,直接push 


    

MyTabBarController *myTabBar=[[MyTabBarController alloc] init];
        UINavigationController *na=[[UINavigationController alloc] initWithRootViewController:myTabBar];
        na.navigationBarHidden=YES;
              self.window.rootViewController=na;
如上代码,就很巧妙的解决了 push以后tabbar 不消失的问题了,由于我要自定义导航栏 所以我把navigationBarHidden设置成yes了 ;


    如果你觉着其他的隐藏自定义tabbar的办法麻烦,不妨试试这个方法哦 

    当然了 大伙要是有好的办法,欢迎共享呀,(*^__^*) 嘻嘻……





评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值