Можно ли скрыть вкладку, когда нажата кнопка, чтобы разрешить полноэкранный просмотр содержимого?
У меня есть UITabBar в подробном представлении моего приложения на основе навигации. Я храню текст и изображения в виде таблицы и хотел бы, чтобы пользователь мог нажимать на ячейку, чтобы скрыть контроллер навигации и панель вкладок для полноэкранного просмотра содержимого.
Я нашел этот код для скрытия верхних баров, но скрыть табуляцию не так просто.
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
[self.navigationController setNavigationBarHidden:YES animated:YES];
Кто-нибудь знает, как это сделать?
Этот код не работает, чтобы скрыть tabBar после того, как представление уже загружено.
yourTabViewController.hidesBottomBarWhenPushed = YES;
Это код, который я нашел. Кажется, работает только при просмотре представления, поэтому его нельзя использовать, чтобы скрыть вкладку, как только она уже появилась. Я все еще изо всех сил стараюсь сделать эту работу. Пожалуйста, помогите!!!
self.tabBarController.tabBar.hidden = YES;
Ответы
Ответ 1
Лучшим обходным решением, которое я нашел, является изменение размера представления, чтобы он охватывал панель. Здесь мой код для скрытия statusBar, navBar и tabBar при выборе строки:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if (appDelegate.navigationController.navigationBar.hidden == NO)
{
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
[appDelegate.navigationController setNavigationBarHidden:YES animated:YES];
[UIView beginAnimations:@"HideTabbar" context:nil];
[UIView setAnimationDuration:.2];
self.view.frame = CGRectMake(0,0,320,480);
[UIView commitAnimations];
}
if (appDelegate.navigationController.navigationBar.hidden == YES)
{
[[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES];
[appDelegate.navigationController setNavigationBarHidden:NO animated:YES];
[UIView beginAnimations:@"ShowTabbar" context:nil];
[UIView setAnimationDuration:.2];
self.view.frame = CGRectMake(0,0,320,368);
[UIView commitAnimations];
}
}
Ответ 2
Есть встроенный способ сделать это:
self.hidesBottomBarWhenPushed = YES;
Но вы должны сделать это до того, как откроется представление. Вот как вы можете использовать это:
ChildViewController* childVC = [[ChildViewController alloc] init];
childVC.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:childVC animated:YES];
[childVC release];
Ответ 3
Мое решение:
// Hide tab bar animated
CATransition *animation = [CATransition animation];
[animation setType:kCATransitionFade];
[[self.view.window layer] addAnimation:animation forKey:@"layerAnimation"];
[self.tabBarController.tabBar setHidden:YES];
// Display tab bar animated
CATransition *animation = [CATransition animation];
[animation setType:kCATransitionFade];
[[self.view.window layer] addAnimation:animation forKey:@"layerAnimation"];
[self.tabBarController.tabBar setHidden:NO];
Вам нужно добавить #import <QuartzCore/QuartzCore.h>
Ответ 4
Я нашел один ответ на этот вопрос, очень простой и эффективный.
Решение состоит в том, чтобы установить опцию "Скрыть нижнюю панель при нажатии" во ВСЕХ ПРОСМОТРАХ, ПРОСМОТРАХ КОНТРОЛЛЕРОВ и TAB BAR CONTROLLERS вашего приложения.
Вы можете сделать это в IB или по коду в любом случае.
Надеюсь, вам это поможет всем...
Ответ 5
Чтобы настроить размер вашего окна, сначала нужно выбрать опцию NONE в поле строки состояния под вкладкой "Атрибуты" окна "Инспектор". Интерфейс Builder позволит вам изменить размер вашего окна.
Ответ 6
В случае, если кому-то нужна версия MonoTouch, этот классный маленький трюк. (спасибо!)
// Method implementations
static void hideTabBar (UITabBarController tabbarcontroller)
{
UIView.Animate(0.4, delegate() {
foreach(UIView view in tabbarcontroller.View.Subviews)
{
if(view.GetType()==typeof(UITabBar))
view.Frame=new RectangleF(view.Frame.X, 480, view.Frame.Size.Width, view.Frame.Size.Height);
else
view.Frame=new RectangleF(view.Frame.X, view.Frame.Y, view.Frame.Size.Width, 480);
}
});
}
static void showTabBar (UITabBarController tabbarcontroller)
{
UIView.Animate(0.4, delegate() {
foreach(UIView view in tabbarcontroller.View.Subviews)
{
if(view.GetType()==typeof(UITabBar))
view.Frame=new RectangleF(view.Frame.X, 367, view.Frame.Size.Width, view.Frame.Size.Height);
else
view.Frame=new RectangleF(view.Frame.X, view.Frame.Y, view.Frame.Size.Width, 367);
}
});
}