Как скрыть панель вкладок программно, а затем расширить вид, чтобы соответствовать - PullRequest
1 голос
/ 27 октября 2010

Я получил код из этого вопроса: Как программно скрыть UITabBarController? , что великолепно, однако представление не расширяется, чтобы соответствовать пространству, оставленному панелью вкладок.

Я установил соответствующие UIViewAutoresizingMasks для вида, но я предполагаю, что только потому, что он скрыт, не означает, что он все еще не занимает пространство?

В любом случае, если я сделаю [self.navigationController setNavigationBarHidden:YES animated:YES];, тогда навигацияпанель перемещается вверх и за пределы экрана, расширяя вид.

Как мне повторить это поведение для панели вкладок?

Ответы [ 5 ]

1 голос
/ 16 января 2014
-(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
1 голос
/ 14 декабря 2010

Оказывается, это не совсем возможно. Лучший способ - представить контроллер модального вида (навигации) вместо нажатия контроллера вида.

1 голос
/ 06 апреля 2013

Это прекрасно сработало для меня! (объединяет решения из других упомянутых постов -580 - случайное большое число)

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)];
    }
}
0 голосов
/ 01 августа 2016

в эпоху NSContraints, НЕ пытайтесь изменять покадровый код, могут случиться плохие вещи.

Использование: pressedViewController.hidesBottomBarWhenPush = YES;

как правило, устанавливает значение hidesBottomBarWhenPressed в yes при подготовке к сеансу, В ЛЮБОЙ момент, прежде чем iOS фактически выдвинет новый контроллер.

0 голосов
/ 27 октября 2010

Самый простой способ - установить новый кадр для вида:

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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...