Last active
May 19, 2023 22:59
-
-
Save tesddev/f4df52d2361823dcc8f31042cf8fea0f to your computer and use it in GitHub Desktop.
Tab bar extension for hiding and showing tab bars in certain view controllers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// Extension written by: @BrentMifsud, usage and slight modification by @tesddev | |
extension UITabBarController { | |
/// Extends the size of the `UITabBarController` view frame, pushing the tab bar controller off screen. | |
/// - Parameters: | |
/// - hidden: Hide or Show the `UITabBar` | |
/// - animated: Animate the change | |
func setTabBarHidden(_ hidden: Bool, animated: Bool) { | |
guard let vc = selectedViewController else { return } | |
guard tabBarHidden != hidden else { return } | |
let frame = self.tabBar.frame | |
let height = frame.size.height | |
let offsetY = hidden ? height : -height | |
UIViewPropertyAnimator(duration: animated ? 0.2 : 0, curve: .easeOut) { | |
self.tabBar.frame = self.tabBar.frame.offsetBy(dx: 0, dy: offsetY) | |
self.selectedViewController?.view.frame = CGRect( | |
x: 0, | |
y: 0, | |
width: vc.view.frame.width, | |
height: vc.view.frame.height + offsetY | |
) | |
self.view.setNeedsDisplay() | |
self.view.layoutIfNeeded() | |
} | |
.startAnimation() | |
} | |
/// Is the tab bar currently off the screen. | |
private var tabBarHidden: Bool { | |
tabBar.frame.origin.y >= UIScreen.main.bounds.height | |
} | |
} | |
/// TO USE | |
self.tabBarController?.setTabBarHidden(true, animated: true) | |
/// It is advisable to put in the ViewWillAppear of view controllers in which the tab bars always show. | |
/// This will return the tab bar in case you pop the view controller. | |
override func viewWillAppear(_ animated: Bool) { | |
self.tabBarController?.setTabBarHidden(false, animated: false) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment