Как скрыть/показать панель вкладок с помощью панели навигации в iOS?
У меня есть представления с панелью навигации и панель вкладок. То, что я хотел бы сделать, - это скрыть панель вкладок на определенном представлении и снова показать панель вкладок, когда пользователь меняет представления.
Я увидел фрагмент кода для скрытия панели вкладок:
-(void)makeTabBarHidden:(BOOL)hide
{
// Custom code to hide TabBar
if ( [tabBarController.view.subviews count] < 2 ) {
return;
}
UIView *contentView;
if ( [[tabBarController.view.subviews objectAtIndex:0] isKindOfClass:[UITabBar class]] ) {
contentView = [tabBarController.view.subviews objectAtIndex:1];
} else {
contentView = [tabBarController.view.subviews objectAtIndex:0];
}
if (hide) {
contentView.frame = tabBarController.view.bounds;
}
else {
contentView.frame = CGRectMake(tabBarController.view.bounds.origin.x,
tabBarController.view.bounds.origin.y,
tabBarController.view.bounds.size.width,
tabBarController.view.bounds.size.height - tabBarController.tabBar.frame.size.height);
}
tabBarController.tabBar.hidden = hide;
}
from: http://nickwaynik.com/iphone/hide-tabbar-in-an-ios-app/
Я вызываю это в представлении, в котором я хочу, чтобы панель вкладок была скрыта
[self makeTabBarHidden:YES];
он отлично работает, когда я показываю/скрываю его в этом представлении, но когда я перехожу назад к предыдущему виду, панель вкладок также скрыта. Я попытался вызвать эту функцию в представлении viewDidUnload, viewWillDisappear, viewDidDisappear, но ничего не происходит. То же самое верно, когда функция вызывается в предыдущем представлении viewDidLoad, viewWillAppear, функции viewDidAppear.
Ответы
Ответ 1
Вместо этого вы можете установить UIViewController.hidesBottomBarWhenPushed:
DetailViewController *detailViewController = [[DetailViewController alloc] init];
detailViewController.hidesBottomBarWhenPushed = YES;
[[self navigationController] pushViewController:detailViewController animated:YES];
[detailViewController release];
Ответ 2
Вы также можете сделать это в построителе интерфейса для раскадровки. Выберите контроллер просмотра, который вы хотите скрыть панель вкладок, а затем выберите "Скрыть нижнюю панель при нажатии".
![введите описание изображения здесь]()
Ответ 3
Я только что создал категорию в UITabBarController, которая позволяет скрыть TabBar, необязательно с анимацией:
https://github.com/idevsoftware/Cocoa-Touch-Additions/tree/master/UITabBarController_setHidden
Он добавляет свойство tabBarHidden
(с isTabBarHidden
в качестве получателя) и метод - (void)setTabBarHidden:(BOOL)hidden animated:(BOOL)animated
.
Ответ 4
self.navigationController.hidesBottomBarWhenPushed=YES;
Добавьте эту строку в viewdidload
или viewWillAppear
это скроет вашу вкладку снизу.
Ответ 5
Swift 3:
Установить скрытие панели в viewwillAppear или viewdidappear
self.tabBarController?.tabBar.isHidden = true
Ответ 6
Такое же свойство доступно в инспекторе атрибутов, когда вы нажимаете на свой контроллер представления в своем файле Xib или раскадровки.
Ответ 7
попробуйте это для hide/show;
-(void)viewWillDisappear:(BOOL)animated{
self.hidesBottomBarWhenPushed = NO;
}
-(void)viewWillAppear:(BOOL)animated{
self.hidesBottomBarWhenPushed = YES;
}