Diseño automático y " Ocultar la barra inferior cuando se empuja"


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

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

Al tocar una de las celdas del controlador de vista de tabla, presiono un UIViewController normal (llamémoslo VC) que oculta la barra de pestañas inferior. (usando la bandera "Ocultar la barra inferior cuando se empuja")

En storyboard agregué una subclase regular UIView a VC que se parece a una barra inferior, y uso Diseño automático para anclarlo en la parte inferior de la vista VC.

Las problema
cuando presiono VC, esta vista tarda un segundo en anclarse a la parte inferior, parece que el diseño automático lo fija a la parte inferior como si la barra de pestañas no estuviera oculta y después de un segundo reconoce que la barra de pestañas está oculta y la mueve a la parte inferior real de la vista.

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

Author: Eyal, 2015-02-25

10 answers

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

introduzca la descripción de la imagen aquí

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

introduzca la descripción de la imagen aquí

Aquí tienes que elegir bottom

introduzca la descripción de la imagen aquí

Una vez que tenga eso, la vista rosa ya no está 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 raíz del controlador de vista empujada esté en el límites de la pantalla principal y esto sucede solo cuando la animación ha terminado.

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

 61
Author: Earl Grey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-08 12:11:55

La respuesta aceptada no funcionó para mí (la opción no estaba disponible). Sin embargo, he encontrado otra solución. (basado en Ocultar la barra inferior Cuando se Empuja a través de Autolayout )

Seleccione booth la vista y el objeto a alinear (en mi caso btnShare) y agregue una nueva restricción de alineación (Bordes inferiores).

introduzca la descripción de la imagen aquí introduzca la descripción de la imagen aquí

 32
Author: Vincenzo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:55:03

Hola En storyboard select Tab bar (Es Escena del Controlador de Barra de pestañas > Controlador de Barra de pestañas > Barra de pestañas ), en el inspector de atributos, desmarque Translúcido caja. Esta acción soluciona tu problema. (Pero hay muchas cosas, "Ocultar la barra inferior cuando se empuja" es a la barra de herramientas).

 11
Author: Onik IV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-25 16:51:40

SI no puedes seleccionar bottomlayoutguide bottom en tu Xcode 7 +

como allí solo haz lo siguiente: abra su storyboard en el editor de código fuente

abrir en el editor buscar el identificador de su controlador

buscar en el archivo fuente buscar <layoutGuides>, escribir <bottom>, copiarlo id

encontrar guías de diseño buscar por id cambiar atributo de arriba a abajo

buscar y reemplazar disfrutar.

 6
Author: Aleksandr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-10 13:43:49

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

 5
Author: Arash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-06 19:27:29

Si desea que la barra de pestañas esté oculta, 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 NO pasando) en el controlador donde desea que la barra de pestañas sea visible. También debe deseleccionar la casilla" Ocultar la barra inferior cuando se empuja " 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 oculta de 0 a 1 durante un corto tiempo. Esto se ve bien si vuelve con el botón atrás. Si desea utilizar el deslizar hacia atrás, tendría que hacer algo más complicado que implica el interactivePopGestureRecognizer.

-(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;
    }];
}
 2
Author: rdelmar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-15 06:35:34

En el storyboard, Vaya al Controlador de vista que desea ocultar la barra de pestañas, haga clic en Attribute Inspector y seleccione Ocultar la barra inferior cuando se presiona. Compruebe la imagen de abajo.

ejemplo de storyboard

 1
Author: Mário Carvalho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-02 11:05:46
-(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;
    }];
}
 1
Author: Breno Morais,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-14 16:41:29

Establecer UINavigationBar Translúcido con NO.

Así: self.navigationController.navigationBar.translucent = NO;

 1
Author: taitanxiami,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-24 15:16:20

Intente fijar la parte inferior de su vista a la parte inferior de superview y no a la disposición inferior

 0
Author: Karthik Rao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-03 16:22:33