开发者

How to hide tab bar programmatically and then expand view to fit

I got the code from t开发者_如何学JAVAhis question: How to hide UITabBarController programmatically? which is brilliant, however the view doesn't expand to fit the space left by the tab bar now.

I have set the appropriate UIViewAutoresizingMasks to the view, but I'm assuming that just because its hidden doesn't mean its not still taking up the space?

Anyway, if I do [self.navigationController setNavigationBarHidden:YES animated:YES]; then the navigation bar moves up and off the screen expanding the view with it.

How can I replicate this behavior for the Tab Bar?


Turns out its not quite possible. Best way is to present a modal view (navigation) controller instead of pushing a view controller.


This worked great for me! (combines solutions from other posts mentioned -580 is randomly large number)

for(UIView *view in self.tabBarController.view.subviews)
{
    if([view isKindOfClass:[UITabBar class]])
    {
        [view setFrame:CGRectMake(view.frame.origin.x, 580, view.frame.size.width,            
                                  view.frame.size.height)];
    }
    else
    {
        [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y,        
                                  view.frame.size.width, view.frame.size.height +40)];
    }
}


-(void)hideTabBar
{   UITabBarController * tabbarcontroller= appDelegate.tabBarVC;
        if (tabbarcontroller.tabBar.isHidden) 
    {
        return;
    }
    tabbarcontroller.tabBar.hidden=YES;
    CGRect frm=tabbarcontroller.view.frame;
    frm.size.height += tabbarcontroller.tabBar.frame.size.height;
    tabbarcontroller.view.frame=frm;
}
-(void)showTabBar
{    UITabBarController * tabbarcontroller=appDelegate.tabBarVC;
    if (!tabbarcontroller.tabBar.isHidden)
    {
        return;
    }
    CGRect frm=tabbarcontroller.view.frame;
    frm.size.height -= tabbarcontroller.tabBar.frame.size.height;
    tabbarcontroller.view.frame=frm;
    tabbarcontroller.tabBar.hidden=NO;  
}
here appDelegate is = (AppDelegate *) [[UIApplication sharedApplication] delegate]
tabBarVc is UITabBarController *tabBarVC defined as property in app delegate


in NSContraints era, do NOT try to modify frame by code, bad things may happen.

Use: pushedViewController.hidesBottomBarWhenPushed = YES;

typically set hidesBottomBarWhenPushed to yes in prepareforSegue, ANYWAY before iOS actually pushes the new controller.


The easiest way is probably to set a new frame for the view:

CGRect viewFrame = view.frame;
viewFrame.size.height += 40; // Change this to the height of the tab bar
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.75];

view.frame = viewFrame;

[UIView commitAnimations];
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜