2012-08-07 2 views
7

Ich habe eine Storyboard-iOS-App, die eine Reihe von Ansichten hat, die ich durchdringe. Ich habe einen UINavigationController mit der Option "Show Toolbar" ausgewählt, die dann in meiner Ansichtshierarchie auffüllt.Wie kann ich die Symbolleiste eines UINavigationController mithilfe von Storyboards ausblenden?

Say meiner Ansicht Fluss 3 Ansichten ist, A, B, und C:

View A --(push)--> View B --(push)--> View C 

Ansicht A ist eine normale Ansicht-Controller, mit einer Taste in der Werkzeugleiste Ansicht B schieben Ansicht B verwendet wird ein Tabellen-Controller, also möchte ich die Toolbar hier verstecken. Ansicht C ist eine andere Ansicht wie Ansicht A, mit einer Symbolleiste, die angezeigt werden muss.

In Xcode/Storyboard, wenn in BI anzeigen "Ausblenden der unteren Leiste beim Drücken" tut es genau das - die untere Leiste ist für Ansicht B ausgeblendet. Ähnlich, wenn ich "None" für die "untere Leiste" wählen wählen Option, es gibt keine Leiste für Ansicht B. Gut.

Hier ist mein Problem: Egal, was ich mache, mit einer Option für Ansicht B, meine Symbolleiste nicht für Ansicht C zurück. Wenn ich die Symbolleiste von C als abgeleitete festlegen (und deaktivieren bei Push ausblenden), tut es nicht t show, noch wenn ich es manuell auf "Toolbar" setze.

Irgendwelche Ideen?

Antwort

15

Wie @ Zoltán sagte, Storyboard bietet nicht die vollständige Antwort.

Einstellung self.navigationController.toolbarHidden = YES/NO in viewDidLoad oder viewWillAppear ist funktional, aber hässlich (ein schwarzes Rechteck erscheint anstelle der Symbolleiste während der Ansichtsübergangsanimation).

Hier ist, was ich für das Modell B-Controller habe (und die inverse für Modell C), um die Animation Glätte der „verstecken auf Push“ Option im Storyboard zu imitieren:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [self.navigationController setToolbarHidden:YES animated:YES]; 
} 

- (void)viewWillDisappear:(BOOL)animated 
{ 
    [self.navigationController setToolbarHidden:NO animated:YES]; 
} 
+0

Haben Sie [super viewWillAppear: animated] und [super viewWillDisappear: animated] eingeschlossen? –

+1

Vergessen Sie nicht, super's viewWillAppear und viewWillDisappear aufzurufen! – liefersfl

+1

Perfekt! In Swift: self.navigationController? .setToolbarHidden (true, animiert: true) – abanet

2

Ich glaube nicht, dass Sie es rein in The Storyboard tun können. Sie können es jedoch immer so einstellen, dass es immer angezeigt wird, setzen Sie die Schaltflächen für jede Ansicht, in der es angezeigt werden soll, und rufen Sie auf. Self.navigationController.toolbarHidden = YES; wenn ein Viewcontroller geladen ist, in dem die Symbolleiste nicht angezeigt werden soll. Wenn eine andere VC angezeigt wird, auf der die Symbolleiste angezeigt werden soll, legen Sie toolbarHidden einfach auf NO fest.

+0

Dies funktioniert nur. Es gibt am Übergang eine hässliche schwarze Markierung, wo die Symbolleiste verschwunden ist. Aber es ist in Bezug auf den Code, der benötigt wird, und die Unfähigkeit für Storyboards, das ganze Ding zur Verfügung zu stellen, richtig. – Freney

Verwandte Themen