2009-05-02 2 views
39

В моем приложении у меня есть панель вкладок. И в некоторых представлениях у меня также есть панель инструментов. Поэтому, когда я прихожу к этим представлениям с помощью панели инструментов, он выглядит уродливым - два столбца внизу представления. Я подумал, что было бы лучшим решением скрыть панель вкладок при вводе этих конкретных представлений. Но я просто не мог понять, как это сделать правильно. Я попытался установить скрытое свойство tabBar UITabBarController в YES, но это не сработало. И я также попытался сделать следующее в любом из видов:Скрыть UITabBar?

self.hidesBottomBarWhenPushed = YES; 

Но это не сработало.

Какое это правильное решение? Я не хочу иметь 2 бара при любом представлении.

спасибо.

ответ

67

Вам необходимо использовать свойство hidesBottomBarWhenPushed для YES на контроллере, который вы нажимаете, а НЕ - в UITabBarController.

otherController.hidesBottomBarWhenPushed = YES; 
[navigationController pushViewController: otherController animated: TRUE]; 

Или вы можете установить свойство при первом инициализации контроллера, который хотите нажать.

+1

У меня есть три контроллера вид, что UITabBarController может представить. На втором контроллере представления я помещаю 'self.hidesBottomBarWhenPushed = YES' в' initWithNibName: bundle: '. Когда я тестировал нажатие на второй контроллер, UITabBar все еще был там. – JoJo

+1

Пробовал новый проект с ios7 - без эффекта – Adam

+0

Когда я возвращаюсь к экрану, у меня есть черное пространство поверх панели вкладок. – manonthemoon

10

Не используйте это решение!

BOOL hiddenTabBar; 
UITabBarController *tabBarController; 

- (void) hideTabBar { 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.4]; 
    for(UIView *view in tabBarController.view.subviews) 
    { 
      CGRect _rect = view.frame; 
      if([view isKindOfClass:[UITabBar class]]) 
      { 
       if (hiddenTabBar) { 
        _rect.origin.y = [[UIScreen mainScreen] bounds].size.height-49; 
        [view setFrame:_rect]; 
       } else { 
        _rect.origin.y = [[UIScreen mainScreen] bounds].size.height; 
        [view setFrame:_rect]; 
       } 
      } else { 
       if (hiddenTabBar) { 
        _rect.size.height = [[UIScreen mainScreen] bounds].size.height-49; 
        [view setFrame:_rect]; 
       } else { 
        _rect.size.height = [[UIScreen mainScreen] bounds].size.height; 
        [view setFrame:_rect]; 
       } 
      } 
    }  
    [UIView commitAnimations]; 

    hiddenTabBar = !hiddenTabBar; 
} 

Source

+1

Использование специальной панели вкладок (ALTabBar). Этот работал для меня. Вместо того, чтобы поддерживать 4-дюймовый экран, я изменил 480 на [[UIScreen mainScreen] границы] -> size.height –

+1

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

+0

Если вы хотите действительно изменить размер представления (не только скрыть tabBar), установите self.tabBarController.tabBar.hidden = hiddenTabBar; – orafaelreis

8

я тоже боролся с этим на некоторое время. Скрытие панели вкладок - один шаг в правильном направлении, но оставляет черный прямоугольник позади. Хитрость заключается в изменении размера слоя, который поддерживает представление UIViewController.

Я написал небольшую демку здесь с решением:

https://github.com/tciuro/FullScreenWithTabBar

Я надеюсь, что это помогает!

+0

Это решение отлично работает для меня, спасибо titusmagnus – avmauricio

+0

Классный, спасибо. –

+0

Удивительный отзыв, пожелание мог бы повышать больше. Я даже не знал, что там был слой, поддерживающий UIViewController! – ryan0

11

Интерфейс строителя имеет флажок для контроллера, встроенного в панель вкладок. Скрывает нижнюю панель при нажатии. В простых случаях не нужно делать это через код сейчас.

Для @Micah

Hide bottom bar on push.

+0

Это сработало для меня на ios7, где установка того же значения в коде didnt – Adam

+0

Где этот флажок? – Micah

+1

@ Мика см. Обновленное сообщение. –

Смежные вопросы