2010-08-23 19 views
6
oculto

¿Hay alguna manera de mostrar una barra de pestañas después de que se haya ocultado?Mostrar barra de pestañas después de su

Tiene una estructura tabbar-nav. Para una de las pestañas, necesito ocultar la barra de pestañas para su vista de segundo y tercer nivel. Pero al mismo tiempo tendré que mostrar su primera y cuarta vista.

El código de ejemplo de Elements no es realmente aplicable aquí, creo.

Respuesta

4

He encontrado una solución pragmática bastante buena para este problema: hacer que la vista de UITabBarController sea más grande de lo que necesita ser, de modo que la UITabBar real quede recortada por la pantalla.

Suponiendo que la opinión de la barra de pestañas normalmente llena su supervista, este tipo de cosas debería funcionar:

CGRect frame = self.tabBarController.view.superview.frame; 
if (isHidden) 
{ 
    CGFloat offset = self.tabBarController.tabBar.frame.size.height; 
    frame.size.height += offset; 
} 
self.tabBarController.view.frame = frame; 

La barra de pestañas sigue mostrando, pero es de la parte inferior de la pantalla, por lo que parece haber sido oculto.

Podría tener implicaciones de rendimiento si provoca un recorte adicional, pero hasta ahora, parece funcionar.

+0

muchas gracias ... es realmente muy útil para mí ... es casi mes final de búsqueda ... – Hiren

1

es necesario implementar un método delegado

- (BOOL)tabBarController:(UITabBarController *)tabBarController2 shouldSelectViewController:(UIViewController *)viewController 

interior que se puede comprobar qué índice se selecciona y se mostrará la barra de pestañas

if([[tabBarController.viewControllers objectAtIndex:0] isEqual:viewController])// it is first tab 
{ 
     tabBarController.tabBar.hidden = FALSE; 
} 
+0

Hola mihirpmehta, No es exactamente la situación que estoy. Para mi situación es una estructura de barra de pestañas-NAV. Espero mostrar la barra de pestañas para el 1 ° y 4 ° nivel. Pero ocúltelo para la segunda y tercera vista. ¿La que describió es después de hacer clic en los elementos de la barra de pestañas? Pregunto si puedo hacer algo como delegate.tabbarcontroller.tabbar.hidden = false delegate.viewController.hidesBottomBarWhenPushed = NO no parece devolver la barra de pestañas para ver. configurando uno mismo.HidesBottomBarWhenPushed = NO en viewDidLoad no funciona también – ngzhongcai

+0

Tiene razón en que ocultaBottomBarWhenPushed no sirve para nada porque, como se documentó, "la barra inferior permanece oculta hasta que el controlador de visualización se saca de la pila". – imaginaryboy

1

Los UIViewControllers que se inserta en la pila de navegación puede hacer algo similar a lo siguiente:

- (void)viewWillAppear:(BOOL)animated { 
    self.tabBarController.tabBar.hidden = NO; // Or YES as desired. 
} 

EDITAR: se agregó el código adicional belo w para tratar con el marco. No creo que recomiende esta idea en particular ya que depende de la estructura de vista predeterminada interna de un UITabBarController.

Definir la siguiente categoría en 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 

Entonces, en lugar de utilizar el cambio tabBar.hidden me sugirió originalmente, haga lo siguiente:

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [self.tabBarController showTabBar:NO]; 
} 

Obviamente asegurándose de que la aplicación tiene incluyó la definición de categoría para que se conozca 'showTabBar'.

+0

Probé lo anterior ... lo que sucede es que la barra de pestañas se oculta, pero en su lugar hay una tira vacía blanca y fea donde la barra de pestañas está 'oculta' – ngzhongcai

+0

Ah, sí, tiene sentido, y por supuesto no lo noté porque en la muestra rápida que probé mis vistas ya eran blancas. Parece como si realmente tuviera que afectar el marco de la vista que se encuentra en el área de visualización principal para ocupar el espacio dejado por el tabBar oculto. Sin embargo, parece un truco intentar que coopere. – imaginaryboy

0

Sé que esta es una publicación anterior, pero creo que el siguiente código ayudaría a ocultar la barra de pestañas en el controlador de visualización que no desea y tiene el beneficio adicional de leer automáticamente la barra de pestañas cuando regrese de esa vista controlador

UIViewController *hideTabbarViewController = [[UIViewController alloc] init]; 
hideTabbarViewController.hidesBottomBarWhenPushed = YES; 
[[self navigationController] hideTabbarViewController animated:YES]; 
Cuestiones relacionadas