Как скрыть панель вкладок iOS для определенного индекса вкладки, и вкладка отображается обратно при касании экрана? - PullRequest
1 голос
/ 30 сентября 2011

Я пытаюсь скрыть панель вкладок для определенного вида и показать ее обратно при касании экрана. Я хочу, чтобы он имел тот же эффект, что и YouTube, например, когда воспроизводится видео, элементы управления проигрывателя скрыты, а к экрану прикасаются элементы управления, которые снова отображаются.

Ответы [ 4 ]

6 голосов
/ 01 октября 2011

Вы можете использовать этот код, чтобы показать и скрыть панель вкладок:

@implementation UITabBarController (Extras)
-(void)showTabBar:(BOOL)show {
  UITabBar* tabBar = self.tabBar;
  if (show != tabBar.hidden)
    return;
  UIView* subview = [self.view.subviews objectAtIndex:0];
  CGRect frame = subview.frame;
  frame.size.height += tabBar.frame.size.height * (show ? -1 : 1);
  subview.frame = frame;
  tabBar.hidden = !show;
}

Этот код работает, недавно был принят Apple в приложении, и (как категория) я нашел, что его легче использовать, чемдругие решения.

Если вы хотите скрыть tabBar, просто позвоните:

[self.tabBarController showTabBar:NO];

Аналогично, чтобы показать его снова, вызовите это сообщение с YES в качестве параметра.

ПРИМЕЧАНИЕ: Каким-то образом я забыл, что уже просматривал этот код в какой-то момент в прошлом, и теперь я не уверен, кто первоначально ответил на него.Saurabh ответил на аналогичный вопрос .Код, предоставленный Saurabh, перебирает все представления в поисках isKindOfClass:[UITabBar class], тогда как я просто беру первое подпредставление - которое может быть хрупким перед лицом обновлений.

3 голосов
/ 30 сентября 2011

Вы пытались просто скрыть панель вкладок?В контроллере вида вы не хотите иметь панель вкладок, добавьте tabBar.hidden = YES; к viewWillAppear: или viewDidAppear: для отмены, у которых есть триггер события касания внутри tabBar.hidden = NO;

Я несделал это лично с панелями вкладок, но это работает с другими представлениями, так что я бы попробовал сначала.

0 голосов
/ 12 ноября 2013

Попробуйте это:

self.tabBarController.tabbar.hidden = YES;

Поместите его в viewDidLoad.

0 голосов
/ 21 ноября 2012
   Try This Code

- (void) hideTabBar:(UITabBarController *) tabbarcontroller 
 {
CGRect screenRect = [[UIScreen mainScreen] bounds];

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
float fHeight = screenRect.size.height;
if(  UIDeviceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation) )
{
    fHeight = screenRect.size.width;
}

for(UIView *view in tabbarcontroller.view.subviews)
{
    if([view isKindOfClass:[UITabBar class]])
    {
        [view setFrame:CGRectMake(view.frame.origin.x, fHeight, view.frame.size.width, view.frame.size.height)];
    } 
    else 
    {
        [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, fHeight)];
        view.backgroundColor = [UIColor blackColor];
    }
}
[UIView commitAnimations];
 }



   - (void) showTabBar:(UITabBarController *) tabbarcontroller 
  {   
CGRect screenRect = [[UIScreen mainScreen] bounds];
float fHeight = screenRect.size.height - 49.0;

if(  UIDeviceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation) )
{
    fHeight = screenRect.size.width - 49.0;
}

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
for(UIView *view in tabbarcontroller.view.subviews)
{   
    if([view isKindOfClass:[UITabBar class]])
    {
        [view setFrame:CGRectMake(view.frame.origin.x, fHeight, view.frame.size.width, view.frame.size.height)];            
    } 
    else 
    {
        [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, fHeight)];
    }       
}
 [UIView commitAnimations]; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...