2009-07-30 5 views
19

Ho un UITabBar nella vista dettagliata della mia applicazione basata sulla navigazione. Sto memorizzando testo e immagini in una vista tabella e vorrei che l'utente fosse in grado di toccare una cella per nascondere il controller di navigazione e la barra delle schede per la visualizzazione a schermo intero del contenuto.È possibile nascondere la barra delle linguette quando si preme un pulsante per consentire una visualizzazione a schermo intero del contenuto?

Ho trovato questo codice per nascondere le barre in alto, ma non sembra facile nascondere la barra delle linguette.

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES]; 
[self.navigationController setNavigationBarHidden:YES animated:YES]; 

Qualcuno sa come farlo?

Questo codice non funziona per nascondere il tabbar una volta che la vista è già stata caricata.

yourTabViewController.hidesBottomBarWhenPushed = YES; 

Questo è il codice che ho trovato. Sembra funzionare solo quando la vista viene caricata, quindi non può essere utilizzato per nascondere la barra delle linguette dopo che è già stata visualizzata. Sto ancora lottando per farlo funzionare. Per favore aiuto!!!

self.tabBarController.tabBar.hidden = YES; 

risposta

8

Il miglior rimedio che ho trovato è quello di modificare le dimensioni della vista in modo che copra la barra delle linguette. Ecco il mio codice per nascondere la barra di stato, Navbar e TabBar quando viene selezionata una riga:

- (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

userei un "altro", ma che mi è ... –

0

Al fine di regolare le dimensioni della finestra, è necessario prima di selezionare l'opzione di NONE nel campo barra di stato, sotto la tua scheda Attributi, della finestra Ispettore. Interface Builder ti permetterà quindi di cambiare la dimensione della tua finestra.

26

c'è un modo integrato per effettuare questa operazione:

self.hidesBottomBarWhenPushed = YES;

Ma si deve fare questo prima che la vista è spinto. Questo è come si potrebbe desiderare di utilizzare tale:

ChildViewController* childVC = [[ChildViewController alloc] init]; 
childVC.hidesBottomBarWhenPushed = YES; 
[self.navigationController pushViewController:childVC animated:YES]; 
[childVC release]; 
+9

O semplicemente impostare self.hidesBottomBarWhenPushed = YES all'interno del metodo init del controller –

+0

Buona chiamata. Grazie. –

+2

Cosa succede se voglio farlo con root viewController in cima allo stack? –

6

La mia soluzione:

// 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]; 

È necessario aggiungere #import <QuartzCore/QuartzCore.h>

+0

Questo ha funzionato meravigliosamente! Puoi impostare "nessuna barra in basso" nello storyboard o nel pannello destro del generatore di interfacce per il controller che stai modificando per ottenere un'idea più precisa di dove finirebbero gli elementi dell'interfaccia una volta nascosta la tabbar –

+0

Nasconde la barra delle linguette, ma lascia un brutto spazio nero – Dejell

3

Ive ha trovato una risposta a questo problema, è molto semplice e efficace.

La soluzione è quella di impostare l'opzione "Nasconde Barra inferiore Push" in tutte le viste, controller di vista e controller barra delle schede della vostra applicazione.

È possibile farlo in IB o comunque tramite codice.

spera che questo aiuta tutti ...

0

Nel caso in cui uno qualsiasi richiede la versione del sistema operativo MonoTouch questo piccolo trucco fresco. (Grazie!)

// 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); 
      } 
     }); 
    } 
Problemi correlati