Можно ли скрыть панель вкладок при нажатии кнопки для полноэкранного просмотра содержимого? - PullRequest
19 голосов
/ 31 июля 2009

У меня есть UITabBar в подробном представлении моего приложения на основе навигации. Я храню текст и изображения в виде таблицы и хотел бы, чтобы пользователь мог нажать на ячейку, чтобы скрыть контроллер навигации и панель вкладок для полноэкранного просмотра содержимого.

Я нашел этот код для скрытия верхних панелей, но не так просто скрыть панель вкладок.

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
 [self.navigationController setNavigationBarHidden:YES animated:YES];

Кто-нибудь знает, как это сделать?

Этот код не работает, чтобы скрыть панель вкладок, когда представление уже загружено.

  yourTabViewController.hidesBottomBarWhenPushed = YES;

Это код, который я нашел. Кажется, работает только при загрузке представления, поэтому его нельзя использовать, чтобы скрыть панель вкладок, когда она уже появилась. Я все еще пытаюсь сделать эту работу. Пожалуйста, помогите !!!

    self.tabBarController.tabBar.hidden = YES;

Ответы [ 6 ]

26 голосов
/ 29 июня 2011

Есть встроенный способ сделать это:

self.hidesBottomBarWhenPushed = YES;

Но вы должны сделать это ДО того, как представление будет выдвинуто. Вот как вы можете использовать это:

ChildViewController* childVC = [[ChildViewController alloc] init];
childVC.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:childVC animated:YES];
[childVC release];
8 голосов
/ 05 сентября 2009

Лучший обходной путь, который я нашел, - это изменить размер представления так, чтобы он покрывал панель вкладок. Вот мой код для сокрытия statusBar, navBar и tabBar при выборе строки:

- (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];
}   
}
6 голосов
/ 11 ноября 2011

Мое решение:

// 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];

Вы должны добавить #import <QuartzCore/QuartzCore.h>

3 голосов
/ 15 ноября 2011

Я нашел один ответ на этот вопрос, очень простой и эффективный.

Решение состоит в том, чтобы установить параметр «Скрывать нижнюю панель при нажатии» во ВСЕХ ПРОСМОТРАХ, КОНТРОЛЛЕРАХ ПРОСМОТРА и КОНТРОЛЛЕРАХ TAB-БАРОВ вашего приложения.

В любом случае вы можете сделать это в IB или по коду.

Надеюсь, это поможет всем ...

0 голосов
/ 11 июня 2013

На случай, если кому-то понадобится версия MonoTouch или этот крутой трюк. (спасибо!)

    // 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);
            }
        });
    }
0 голосов
/ 28 апреля 2010

Чтобы отрегулировать размер вашего окна, вам сначала нужно выбрать опцию NONE в поле строки состояния на вкладке Attributes окна Inspector. Interface Builder позволит вам изменить размер вашего окна.

...