问题
I have a UITabBar in the detail view of my navigation based application. I am storing text and images in a tableview and would like the user to be able to tap on a cell to hide the navigation controller and the tabbar for full screen viewing of the content.
I found this code for hiding the top bars, but it does not seem as easy to hide the tabbar.
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
[self.navigationController setNavigationBarHidden:YES animated:YES];
Does anyone know how to do this?
This code does not work to hide the tabBar once the view is already loaded.
yourTabViewController.hidesBottomBarWhenPushed = YES;
This is the code I found. Seems to only work when the view is loaded though, so it can't be used to hide the tabbar once it has already appeared. I'm still struggling to make this work. Please help!!!
self.tabBarController.tabBar.hidden = YES;
回答1:
There's a built-in way to do this:
self.hidesBottomBarWhenPushed = YES;
But you have to do this BEFORE the view is pushed. This is how you might want to use that:
ChildViewController* childVC = [[ChildViewController alloc] init];
childVC.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:childVC animated:YES];
[childVC release];
回答2:
The best workaround I have found is to change the view size so that it covers the tabbar. Here's my code for hiding the statusBar, navBar, and tabBar when a row is selected:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if (appDelegate.navigationController.navigationBar.hidden == NO)
{
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
[appDelegate.navigationController setNavigationBarHidden:YES animated:YES];
[UIView beginAnimations:@"HideTabbar" context:nil];
[UIView setAnimationDuration:.2];
self.view.frame = CGRectMake(0,0,320,480);
[UIView commitAnimations];
}
if (appDelegate.navigationController.navigationBar.hidden == YES)
{
[[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES];
[appDelegate.navigationController setNavigationBarHidden:NO animated:YES];
[UIView beginAnimations:@"ShowTabbar" context:nil];
[UIView setAnimationDuration:.2];
self.view.frame = CGRectMake(0,0,320,368);
[UIView commitAnimations];
}
}
回答3:
My solution:
// Hide tab bar animated
CATransition *animation = [CATransition animation];
[animation setType:kCATransitionFade];
[[self.view.window layer] addAnimation:animation forKey:@"layerAnimation"];
[self.tabBarController.tabBar setHidden:YES];
// Display tab bar animated
CATransition *animation = [CATransition animation];
[animation setType:kCATransitionFade];
[[self.view.window layer] addAnimation:animation forKey:@"layerAnimation"];
[self.tabBarController.tabBar setHidden:NO];
You have to add #import <QuartzCore/QuartzCore.h>
回答4:
I´ve found one answer to this issue, is very simple and effective.
The solution is to set the option "Hides Bottom Bar on Push" in ALL VIEWS, VIEW CONTROLLERS and TAB BAR CONTROLLERS of your app.
You can do this in IB or by code anyway.
Hope you this helps everyone...
回答5:
In order to adjust the size of your window, you first need to select the option of NONE in the status bar field, under your Attributes tab, of your Inspector window. Interface Builder will then let you change the size of your window.
回答6:
In case any one needs the MonoTouch version os this cool little trick. (thanks!)
// Method implementations
static void hideTabBar (UITabBarController tabbarcontroller)
{
UIView.Animate(0.4, delegate() {
foreach(UIView view in tabbarcontroller.View.Subviews)
{
if(view.GetType()==typeof(UITabBar))
view.Frame=new RectangleF(view.Frame.X, 480, view.Frame.Size.Width, view.Frame.Size.Height);
else
view.Frame=new RectangleF(view.Frame.X, view.Frame.Y, view.Frame.Size.Width, 480);
}
});
}
static void showTabBar (UITabBarController tabbarcontroller)
{
UIView.Animate(0.4, delegate() {
foreach(UIView view in tabbarcontroller.View.Subviews)
{
if(view.GetType()==typeof(UITabBar))
view.Frame=new RectangleF(view.Frame.X, 367, view.Frame.Size.Width, view.Frame.Size.Height);
else
view.Frame=new RectangleF(view.Frame.X, view.Frame.Y, view.Frame.Size.Width, 367);
}
});
}
来源:https://stackoverflow.com/questions/1209582/is-it-possible-to-hide-the-tabbar-when-a-button-is-pressed-to-allow-a-full-scree