2009-07-30 9 views
19

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

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

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

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

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

yourTabViewController.hidesBottomBarWhenPushed = YES; 

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

self.tabBarController.tabBar.hidden = YES; 

ответ

8

Лучшее обходное решение, которое я нашел, состоит в том, чтобы изменить размер представления так, чтобы он закрывал табуляцию. Вот мой код для сокрытия 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]; 
} 
} 
+2

Я бы использовать «еще», но это я ... –

0

Для того, чтобы изменить размер окна, в первую очередь необходимо выбрать опцию NONE в поле строки состояния, под вкладкой «Атрибуты» вашего окна «Инспектор». Интерфейс Builder позволит вам изменить размер вашего окна.

26

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

self.hidesBottomBarWhenPushed = YES;

Но вы должны сделать это прежде, чем вид выталкивается. Это, как вы можете использовать это:

ChildViewController* childVC = [[ChildViewController alloc] init]; 
childVC.hidesBottomBarWhenPushed = YES; 
[self.navigationController pushViewController:childVC animated:YES]; 
[childVC release]; 
+9

Или просто установить self.hidesBottomBarWhenPushed = YES внутри метода инициализации от контроллера –

+0

Хорошего вызова. Благодарю. –

+2

Что делать, если я хочу сделать это с корневым viewController в верхней части стека? –

6

Мое решение:

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

+0

Это сработало чудесно! Вы можете установить «нижнюю панель» в правой панели панели раскадровки или интерфейса для контроллера, который вы изменяете, чтобы получить более точное представление о том, где элементы интерфейса будут в конечном итоге, когда вы скроете табуляцию. –

+0

Это скрывает панель вкладок, но оставляет уродливое черное пространство – Dejell

3

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

Решение должно установить опцию «Скрывает нижнюю планку при нажатии» во ВСЕХ ВИДЕ, ВИДИТЕ КОНТРОЛЛЕРЫ и КОНТРОЛЛЕРЫ TAB BAR вашего приложения.

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

Надеется, что вы это помогает всем ...

0

В случае, если какая-либо один нуждается в 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); 
      } 
     }); 
    }