Контроллеры UIViewControllers, которые помещаются в стек навигации, могут делать что-то вроде следующего:
- (void)viewWillAppear:(BOOL)animated {
self.tabBarController.tabBar.hidden = NO; // Or YES as desired.
}
РЕДАКТИРОВАТЬ: Добавлен дополнительный код ниже, чтобы иметь дело с кадром. Не думаю, что я особенно рекомендую эту идею, поскольку она опирается на внутреннюю структуру представления по умолчанию UITabBarController.
Определите следующую категорию на UITabBarController:
@interface UITabBarController (Extras)
- (void)showTabBar:(BOOL)show;
@end
@implementation UITabBarController (Extras)
- (void)showTabBar:(BOOL)show {
UITabBar* tabBar = self.tabBar;
if (show != tabBar.hidden)
return;
// This relies on the fact that the content view is the first subview
// in a UITabBarController's normal view, and so is fragile in the face
// of updates to UIKit.
UIView* subview = [self.view.subviews objectAtIndex:0];
CGRect frame = subview.frame;
if (show) {
frame.size.height -= tabBar.frame.size.height;
} else {
frame.size.height += tabBar.frame.size.height;
}
subview.frame = frame;
tabBar.hidden = !show;
}
@end
Затем, вместо того, чтобы использовать изменение tabBar.hidden, которое я изначально предлагал, сделайте следующее:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.tabBarController showTabBar:NO];
}
Очевидно, что убедиться, что реализация включает определение категории, так что 'showTabBar' известен.