Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I hide/show tabBar when tapped using Swift in iOS8

I am trying to mimic the UINavigationController's new hidesBarsOnTap with a tab bar. I have seen many answers to this that either point to setting the hidesBottomBarWhenPushed on a viewController which only hides it entirely and not when tapped.

 @IBAction func tapped(sender: AnyObject) {      // what goes here to show/hide the tabBar ???   } 

thanks in advance

EDIT: as per the suggestion below I tried

self.tabBarController?.tabBar.hidden = true 

which does indeed hide the tabBar (toggles true/false on tap), but without animation. I will ask that as a separate question though.

like image 940
Michael Campsall Avatar asked Nov 19 '14 04:11

Michael Campsall


People also ask

How do I hide a tabBar in Swift?

Simply, Go to ViewController (in StoryBoard) -> Attribute inspector -> Under 'View Controller' section select 'Hide Bottom Bar on Push' checkbox. This works like a charm.

How do I hide the bottom bar in Swift?

Answer: Use self. tabBarController?. tabBar. hidden instead of hidesBottomBarWhenPushed in each view controller to manage whether the view controller should show a tab bar or not.


1 Answers

After much hunting and trying out various methods to gracefully hide/show the UITabBar using Swift I was able to take this great solution by danh and convert it to Swift:

func setTabBarVisible(visible: Bool, animated: Bool) {      //* This cannot be called before viewDidLayoutSubviews(), because the frame is not set before this time      // bail if the current state matches the desired state     if (tabBarIsVisible() == visible) { return }      // get a frame calculation ready     let frame = self.tabBarController?.tabBar.frame     let height = frame?.size.height     let offsetY = (visible ? -height! : height)      // zero duration means no animation     let duration: TimeInterval = (animated ? 0.3 : 0.0)      //  animate the tabBar     if frame != nil {         UIView.animate(withDuration: duration) {             self.tabBarController?.tabBar.frame = frame!.offsetBy(dx: 0, dy: offsetY!)             return         }     } }  func tabBarIsVisible() -> Bool {     return (self.tabBarController?.tabBar.frame.origin.y)! < self.view.frame.maxY }  // Call the function from tap gesture recognizer added to your view (or button)  @IBAction func tapped(_ sender: Any?) {     setTabBarVisible(visible: !tabBarIsVisible(), animated: true) } 
like image 155
Michael Campsall Avatar answered Sep 27 '22 18:09

Michael Campsall