ios - uitabbarcontroller swift 4
iOS- ¿Cómo ocultar/mostrar la barra de pestañas de UITabBarController con animación? (3)
Tengo una pregunta sobre la UITabBarController
de UITabBarController
de UITabBarController
de iOS.
Estoy usando un UITabBarController
para mostrar algunas vistas, pero como quiero que las vistas se muestren con una pantalla lo más grande posible. Es posible ocultar la barra de pestañas para que normalmente no se muestre, hasta que el usuario toque la pantalla, luego aparecerá la barra de pestañas (con animación) en la parte inferior. Luego, después de unos segundos, si no se hace nada, la barra de pestañas desaparecerá nuevamente, de modo que la vista vuelva a estar en pantalla completa nuevamente.
No creas que funcionará en UIGuidelines de Apple. Las vistas que está utilizando se dibujan sobre la barra de pestañas, por lo que si se desvanece, no habrá nada allí.
Posiblemente pueda hacer una vista pequeña con botones en lugar de la barra de pestañas que hace lo que quiere.
Así es como lo muestras
- (void)showTabBar:(UITabBarController *)tabbarcontroller
{
tabbarcontroller.tabBar.hidden = NO;
[UIView animateWithDuration:kAnimationInterval animations:^{
for (UIView *view in tabbarcontroller.view.subviews) {
if ([view isKindOfClass:[UITabBar class]]) {
[view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y-49.f, view.frame.size.width, view.frame.size.height)];
}
else {
[view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, view.frame.size.height-49.f)];
}
}
} completion:^(BOOL finished) {
//do smth after animation finishes
}];
}
... y así es como lo ocultas
- (void)hideTabBar:(UITabBarController *)tabbarcontroller
{
[UIView animateWithDuration:kAnimationInterval animations:^{
for (UIView *view in tabbarcontroller.view.subviews) {
if ([view isKindOfClass:[UITabBar class]]) {
[view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y+49.f, view.frame.size.width, view.frame.size.height)];
}
else {
[view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, view.frame.size.height+49.f)];
}
}
} completion:^(BOOL finished) {
//do smth after animation finishes
tabbarcontroller.tabBar.hidden = YES;
}];
}
Con la respuesta aceptada, en iOS 7 cuando oculta la barra de pestañas y la vuelve a mostrar, el tamaño es incorrecto. Este código da un mejor resultado:
- (void) toggleTabBar: (UITabBar *)tabBar view: (UIView*) view {
tabBar.hidden = NO;
[UIView animateWithDuration:0.5 animations:^{
if (hiddenTabBar) {
tabBar.center = CGPointMake(tabBar.center.x, self.view.window.bounds.size.height-tabBar.bounds.size.height/2);
}
else {
tabBar.center = CGPointMake(tabBar.center.x, self.view.window.bounds.size.height+tabBar.bounds.size.height);
}
} completion:^(BOOL finished) {
hiddenTabBar = !hiddenTabBar;
tabBar.hidden = hiddenTabBar;
}];
}