tab bar apple ios objective-c storyboard uitabbarcontroller autolayout

ios - apple - Diseño automático y "Ocultar barra inferior cuando se presiona"



storyboard apple (10)

El problema es con esta restricción específica que se encuentra entre la vista y la parte superior de la guía de diseño inferior.

Seleccione la restricción y edite su propiedad "Segundo elemento"

Aquí debes elegir fondo

Una vez que tenga eso, la vista rosa ya no estará influenciada por la guía de diseño. La guía de diseño parece reconocer que la barra de pestañas está oculta solo después de que la vista de la raíz del controlador de vista empujada se encuentre dentro de los límites de la pantalla principal y esto solo ocurre cuando finaliza la animación.

Y esa es la razón por la cual la jerarquía de vistas necesita distribuirse de nuevo, lo que causa la animación no deseada.

La estructura (simplificada) de mi aplicación es esta:

UITabBarController con un UINavigationController contiene un UITableViewController como controlador de vista raíz.

al tocar una de las celdas del controlador de vista de tabla, UIViewController un UIViewController regular (vamos a llamarlo VC) para ocultar la barra de pestañas inferior. (usando la bandera "Ocultar barra inferior cuando se empuja")

En el guión gráfico, agregué una subclase UIView regular a VC que se parece a una barra inferior, y utilizo el diseño automático para fijarla en la parte inferior de la vista de VC.

El problema
cuando presiono VC, demora un segundo para que esta vista quede fija en la parte inferior, parece que el diseño automático lo fija al fondo como si la barra de pestañas no estuviera oculta y luego de un segundo reconoce que la barra de pestañas está oculta y la mueve al fondo real de la vista.

Sé que no es la mejor explicación, así que agregué un proyecto muy simple para demostrar el problema.


En el guión gráfico, vaya al controlador de vista que desea ocultar la barra de pestañas, haga clic en el inspector de atributos y seleccione Ocultar barra inferior cuando se lo presione . Verifique la imagen a continuación.


Hola En el guión gráfico, seleccione la barra de pestañas (¿Es Tab Bar Controller Scene?> Tab Bar Controller> Tab Bar), en el inspector de atributos, desmarque Translucent box. Esta acción soluciona tu problema. (Pero hay muchas cosas, "Ocultar barra inferior cuando se presiona" es a la barra de herramientas).


Intenta fijar la parte inferior de la vista en la parte inferior de la supervista y no en la parte inferior del diseño



SI no puede seleccionar bottomlayoutguide bottom en su Xcode 7+

solo haga lo siguiente: abra su guión gráfico en el editor de código fuente

busca el identificador de tu controlador

encuentre <layoutGuides> , escriba <bottom> , cópielo ID

búsqueda por atributo de cambio de id de arriba a abajo

disfrutar.


Seleccione su "Controlador de navegación" y en "Inspector de atributos" elimine la marca de "Debajo de las barras inferiores".


Si desea ocultar la barra de pestañas, puede agregar este código a su controlador,

- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.tabBarController.tabBar.hidden = YES; }

También tendrá que poner ese código (pero pasando NO) en el controlador donde desea que la barra de pestañas sea visible. También debe anular la selección de la casilla "Ocultar barra inferior cuando se presiona" en IB.

Después de Editar:

Obtendrá una mejor animación si, en el primer controlador, anima el valor alfa de la barra de pestañas no ocultas de 0 a 1 en un corto período de tiempo. Esto se ve bien si regresas con el botón Atrás. Si quiere usar el deslizamiento hacia atrás, debería hacer algo más complicado que involucre el interactivoPopGestureRecognizer.

-(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.tabBarController.tabBar.hidden = NO; self.tabBarController.tabBar.alpha = 0.0; [UIView animateWithDuration:.4 animations:^{ self.tabBarController.tabBar.alpha = 1.0; }]; }


establece UINavigationBar Translucent con NO.

como este: self.navigationController.navigationBar.translucent = NO;


-(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.tabBarController.tabBar.hidden = NO; self.tabBarController.tabBar.alpha = 0.0; [UIView animateWithDuration:.3 animations:^{ self.tabBarController.tabBar.alpha = 5.0; }]; }