2009-05-02 24 views
39

In meiner App habe ich eine Tab-Leiste. Und in einigen Ansichten habe ich auch eine Symbolleiste. Wenn ich also mit einer Werkzeugleiste zu diesen Ansichten komme, sieht es hässlich aus - zwei Balken am unteren Rand der Ansicht. Ich dachte, dass es eine beste Lösung wäre, eine Tab-Leiste auszublenden, wenn man diese bestimmten Ansichten eingibt. Aber ich konnte einfach nicht herausfinden, wie man es richtig macht. Ich habe versucht, die versteckte Eigenschaft von UITabBarController tabBar auf YES zu setzen, aber es hat nicht funktioniert. Und ich versuchte auch die folgende Sache in welcher Sicht auch immer ich bin:Ausblenden UITabBar?

Aber es hat nicht so gut funktioniert.

Was ist die richtige Lösung für diese Situation? Ich möchte keine 2 Bars haben.

Vielen Dank.

Antwort

67

Sie müssen die Eigenschaft hidesBottomBarWhenPushed auf dem Controller, den Sie drücken, auf YES setzen und NICHT auf den UITabBarController.

Oder Sie können die Eigenschaft festlegen, wenn Sie den Controller zum ersten Mal initialisieren.

+1

Ich habe drei View-Controller, der die UITabBarController präsentieren können. Auf dem zweiten View-Controller habe ich 'self.hidesBottomBarWhenPushed = YES' in' initWithNibName: bundle: 'gesetzt. Als ich den zweiten View-Controller angetippt habe, war die UITabBar immer noch da. – JoJo

+1

Ich habe ein neues Projekt mit ios7 versucht - kein Effekt – Adam

+0

Wenn ich zurück zum Bildschirm gehe, habe ich ein schwarzes Leerzeichen oben auf der Tab-Leiste. – manonthemoon

10

Verwenden Sie diese Lösung nicht!

BOOL hiddenTabBar; 
UITabBarController *tabBarController; 

- (void) hideTabBar { 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.4]; 
    for(UIView *view in tabBarController.view.subviews) 
    { 
      CGRect _rect = view.frame; 
      if([view isKindOfClass:[UITabBar class]]) 
      { 
       if (hiddenTabBar) { 
        _rect.origin.y = [[UIScreen mainScreen] bounds].size.height-49; 
        [view setFrame:_rect]; 
       } else { 
        _rect.origin.y = [[UIScreen mainScreen] bounds].size.height; 
        [view setFrame:_rect]; 
       } 
      } else { 
       if (hiddenTabBar) { 
        _rect.size.height = [[UIScreen mainScreen] bounds].size.height-49; 
        [view setFrame:_rect]; 
       } else { 
        _rect.size.height = [[UIScreen mainScreen] bounds].size.height; 
        [view setFrame:_rect]; 
       } 
      } 
    }  
    [UIView commitAnimations]; 

    hiddenTabBar = !hiddenTabBar; 
} 

Source

+1

Verwenden einer benutzerdefinierten Tab-Leiste (ALTabBar). Dieser hat für mich funktioniert. Anstatt den 4 "-Bildschirm zu unterstützen, habe ich 480 in [[UIScreen mainScreen] -Begrenzungen geändert.) -> size.height –

+1

toll, aber ... verwende keine festen Werte wie 431 oder 480. Du solltest immer Code schreiben, um ihn auszuführen Bildschirmgröße – orafaelreis

+0

Wenn Sie die Ansicht wirklich ändern möchten (nicht nur tabBar ausblenden) set self.tabBarController.tabBar.hidden = hiddenTabBar; – orafaelreis

8

Ich kämpfte auch mit diesem für eine Weile. Das Ausblenden der Tab-Leiste ist ein Schritt in die richtige Richtung, hinterlässt jedoch ein schwarzes Rechteck. Der Trick besteht darin, die Größe der Ebene zu ändern, die die Ansicht des UIViewControllers unterstützt.

https://github.com/tciuro/FullScreenWithTabBar

Ich hoffe, das hilft:

Ich habe eine kleine Demo hier mit einer Lösung geschrieben!

+0

Diese Lösung funktioniert gut für mich, danke titusmagnus – avmauricio

+0

Classy, ​​danke. –

+0

Awesome Tipp, ich wünschte könnte mehr upvote.Ich wusste nicht einmal, dass es eine Schicht hinter dem UIViewController! – ryan0

11

Interface Builder hat Kontrollkästchen für View-Controller in Tab-Leiste eingebettet - Hides untere Leiste auf Push. In einfachen Fällen ist es nicht nötig, dies jetzt über den Code zu tun.

Für @Micah

Hide bottom bar on push.

+0

Dies funktionierte für mich auf ios7 wo Einstellung gleichen Wert im Code nicht – Adam

+0

Wo ist dieses Kontrollkästchen? – Micah

+1

@Micah siehe aktualisierten Beitrag. –