I am currently hiding the tab bar with this piece of code:
#pragma mark - Rotation status bar methods
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {
// only iOS 7 methods, code from http://stackoverflow.com/questions/18525778/status-bar-still-showing
[self prefersStatusBarHidden];
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
}else {
// iOS 6 code only here...checking if we are now going into landscape mode
if((toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) ||(toInterfaceOrientation == UIInterfaceOrientationLandscapeRight))
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
else
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
}
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
}
- (BOOL)prefersStatusBarHidden
{
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
if(orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight){
[self setTabBarVisible:NO animated:NO];
return YES;
}
else{
[self setTabBarVisible:YES animated:NO];
return NO; //returned when in portrait, or when app is first launching (UIInterfaceOrientationUnknown)
}
}
#pragma mark - Rotation tab bar methods
- (void)setTabBarVisible:(BOOL)visible animated:(BOOL)animated {
// bail if the current state matches the desired state
if ([self tabBarIsVisible] == visible) return;
// get a frame calculation ready
CGRect frame = self.tabBarController.tabBar.frame;
CGFloat height = frame.size.height;
CGFloat offsetY = (visible)? -height : height;
// zero duration means no animation
CGFloat duration = (animated)? 0.3 : 0.0;
[UIView animateWithDuration:duration animations:^{
self.tabBarController.tabBar.frame = CGRectOffset(frame, 0, offsetY);
}];
}
- (BOOL)tabBarIsVisible {
return self.tabBarController.tabBar.frame.origin.y < CGRectGetMaxY(self.view.frame);
}
This works PERFECTLY, with the exception of one case! The code above is in a UiTableViewController (embedded in navigation controller). When I segue to another viewController (lets say in portrait mode), rotate to landscape, and then tap the back button, I end up back at my UiTableViewController...in landscape mode. However the tab bar reappears by itself.
What would be the cause of this and how may I fix this?
PS: Manually calling this code to try and re-hide the tab bar has proved to be a futile effort lol.