swift 真正移除下面的tabbar(最简单的解决方式)

在使用push方式进行跳转的时候,tabbar跟着显示。有时候不需要它了,应该如何去掉呢

网上有很多种解决方案,原理大致相同(但是大部分方案只是做到了隐藏,隐藏后下面还是会有空白占据一定的空间)如何把下面的空白也去掉呢?其实只需要三句代码或许两句也能

方案一:(如果不行请看方案二)

我的解决方式.(有什么不明白的可以在下面留言)

在需要隐藏tabbar的界面的ViewController中的viewWillAppear方法中添加两行代码 (测试的时候第一句代码貌似不要也行)

          self.tabBarController?.hidesBottomBarWhenPushed = true;

        self.tabBarController?.tabBar.hidden = true//隐藏tabbar

        self.automaticallyAdjustsScrollViewInsetsfalse//移除隐藏后留下的空白

这时候如果点击返回按钮,关闭该界面会发现,根视图的底部tabbar也被隐藏了,这当然不是我们想要的效果了

再根视图控制器中再设置不让它隐藏不就行了


self.tabBarController?.tabBar.hidden = false

2016.12.22更新

方案二:上面的代码之前运行完全可以达到效果。今天测试的竟然没有用了,下面还是有黑色的占据空间

后来发现是新添加的几行代码让上面这三行代码失效了。

具体原因是对tabbar的样式进行设置的代码让这三行代码失效了,屌不屌,坑不坑。(tabbar样式设置请参考:http://blog.csdn.net/wei_chong_chong/article/details/53763662)

但是我又发现了更加简单的方式

在需要隐藏底部tabbar的界面的stroyboard中设置一下就ok了



  下面是网上其它的解决方式,但是他们只是隐藏了tabbar没有移除空白,我是在他们的基础上改进的。


控制器有个hidesBottomBarWhenPushed属性。官方的定义是:// If YES, then when this view controller is pushed into a controller hierarchy with a bottom bar (like a tab bar), the bottom bar will slide out. Default is NO. 即,当控制器被push进一个控制器之后,底部条(比如tabBar)会滑出。默认为NO。

现在假设一种情况,tabBarController上放着四个导航控制器,那么要想实现push进一个新的控制器的时候,将tabBarController的tabBar隐藏,只要设置hidesBottomBarWhenPushed = YES;那如果想要隐藏呢?有的人可能会这么做:在viewWillApper里面加入下面的代码:

 

if (self.navigationController?.viewControllers.count == 1) {

self.tabBarController.tabBar.hidden = false;

}

这样做,在第一遍返回到tabBarController上时,是没问题的。但是当第二次再push进入一个新的控制器时,你会发现,hidesBottomBarWhenPushed根本没生效,怎么解决呢?

将viewWillAppear里面的代码更换成:

 

if (self.navigationController?.viewControllers.count > 1) {

            

            self.tabBarController?.tabBar.hidden = true;

            

        }else {

            

            self.tabBarController?.tabBar.hidden = false;

            

        }

这时就完美的解决了问题。

这个时候,也有人可能会问:是不是只要在viewWillAppear里面加入那些代码就可以,不用设置hidesBottomBarWhenPushed属性为YES。那么你只要试一下,你就会知道。。


网上方式2.

    

 func setTabBarVisible(visible:Bool, animated:Bool) {
          if (tabBarIsVisible() == visible) { return }
        
        let frame = self.tabBarController?.tabBar.frame
        let offsetY:CGFloat = (visible ? 49.0 : 49.0)
        
        let duration:NSTimeInterval = (animated ? 0.3 : 0.0)
        if frame != nil {
            UIView.animateWithDuration(duration) {
                self.tabBarController?.tabBar.frame = CGRectOffset(frame!, 0, offsetY)
                return
            }
        }
    }
    
    func tabBarIsVisible() ->Bool {
        return self.tabBarController?.tabBar.frame.origin.y < CGRectGetMaxY(self.view.frame)
    }

然后调用

setTabBarVisible(true, animated: false)

参考:

http://www.it165.net/pro/html/201503/37047.html

http://www.jianshu.com/p/56c8b3c1403c

http://www.cnblogs.com/ritian/p/5248451.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值