2016-04-24 7 views
7

Eingebaute Fotoanwendung blendet die Navigationsleiste aus, wenn Sie auf ein Bild tippen. Auf diese Weise ermöglicht die Foto-App, es im Vollbildmodus zu sehen.Wie navigiere ich in die NavigationBar auf iOS 9?

Wie funktioniert es tun dies (EFFEKT verblassen)?

Wie ich verstehe navigationController?.navigationBar.alpha funktioniert nicht mehr (so können Sie es auf diese Weise nicht animiert).

+0

Was ist mit dem 'UINavigationController setNavigationBarHidden: animated:' Methode ? – rmaddy

+0

BTW - Ich habe eine App, die die 'alpha' -Eigenschaft der' navigationBar' animiert und es funktioniert ganz gut. Nicht sicher, warum du sagst, dass es nicht mehr funktioniert. Versuch es. – rmaddy

+0

@rmaddy Zeigt die Navigationsleiste an und blendet sie aus. Es werden jedoch unterschiedliche Animationen verwendet. Es verschiebt es nach oben und unten (vs verblassen es ein und aus) –

Antwort

5

Teilen alle meine Entdeckung.

Beschweren Modus auf

Ehrlich gesagt, ich fühle mich halb sauer/wie ein Dummy, dass ich einen guten Tag zu kämpfen hatte vorhandenen Apple App einfache Sache zu implementieren.

Beschweren Modus

Zunächst einmal ist hier etwas Kontext ab. Ich arbeite mit navigationbar, die von Navigation zur Verfügung gestellt werden (gegenüber nur Standalone-Bars, die in Ihrer Ansicht manuell gelöscht werden)

Es gibt mehrere Ansätze, die ich gefunden haben. Ich werde sie alle erwähnen (auch wenn ich mit ihnen keinen Erfolg hatte)

1) Animieren Änderung der Alpha-Version von navigationbar

UIView.animateWithDuration(0.1, animations: { 
    navigationController?.navigationBar.alpha = 0 
}, completion: nil) 

@rmaddy Erwähnung hier, dass es für ihn arbeitet. Ich glaube jedoch, dass er eine eigenständige Bar hat (gegenüber einer Bar, die von NavigationController verwaltet wird).

verwendete ich ein Werkzeug Reveal UI-Hierarchie zu überprüfen und fand einige Dinge. - Es gibt eine navigationbar, die versteckt ist (und navigationController?.navigationBar verweist es). So können Sie Alpha in Ihre Herzen Freude ändern, aber diese Änderungen werden nicht sichtbar sein.

Es gibt jedoch eine andere navigationbar. Ich nehme an, dass es in einigen privaten Mitgliedern von navigationController referenziert wird (nennen wir es private navigationBar). Es ist sichtbar und das wird oben in der Ansicht angezeigt.

2) Verwenden setNavigationBarHidden: animated:

Dies ist eine Standardmethode ist/show Navigationsleiste auszublenden. Es ist anders animiert (es rutscht/rauf und runter). Wenn es aber für Sie in Ordnung ist, gehen Sie einfach mit, denn es ist einfach und sauber.

navigationController?.setNavigationBarHidden(true, animated: true) 

Zusätzlich können Sie wickeln Sie es in UIView.beginAnimations, UIView.commitAnimations es zu animieren zusammen mit einigen anderen Sachen (um es glatter)

3) Änderung von alpha privaten Navigationsleiste Animieren.

Das ist für mich gearbeitet:

let privateNavigationBar = self.superview?.superview?.superview?.superview?.superview?.superview?.subviews[1] 
UIView.animateWithDuration(0.1, animations: { 
     privateNavigationBar.alpha = 0 
    }, completion: nil) 

ich durch die Hierarchie Art und Weise, um eine Ansicht erhalten werde, die privaten navigationbar enthält (die für diese Ansicht zweite subview ist).

Allerdings hat dieser Ansatz mehrere Nachteile:

  • I # von superviews glauben? hängt von Ihrer App-Hierarchie ab (im Gegensatz zur Split-Ansicht usw.). Ich denke, Sie können verallgemeinern oder Sie können nur die ganze Hierarchie gehen, um nicht versteckte UINavigationBar zu finden, um dies zu lösen.
  • Ich habe das Gefühl, dass Apple in diesem Stirnrunzeln kann (die App nicht mit dem Appstor akzeptiert werden)

4) Stellen navigationbar transparent und stellen Sie Hintergrundbild transparent zu sein und Alphakanal auf ihn zu ändern.

Ich kann nicht finden, wo ich über diese Idee lese. Es gab einige Erwähnung.

Dort ist Apple example app, die zeigt, wie man NavigationBar anpasst, einschließlich, es transparent zu machen.

Es ist interessant, dass diese Beispiel-App für mich funktioniert (die Navigationsleiste ist transparent darin). Als ich diesen Code in meiner App ausprobierte, funktionierte das nicht (ich wusste immer noch nicht, was damit vor sich ging). Wie üblich gibt es Reihe von Variablen (etwas in Info.plist sein können, auch eine Unterklasse sie Navigation, auch etwas in Ansichtshierarchie sein kann)

5) Hinzufügen von Standalone navigationbar

Sie eine Bar zur Verfügung gestellt verstecken von NavigationController. Fügen Sie Ihre eigene zu der UIView hinzu, verbinden Sie sie mit @IBOutlet und verwenden Sie Alpha-Animation (höchstwahrscheinlich bezieht sich @raddy auch darauf).

Ich habe überprüft und das ist Arbeit.

Dieser Ansatz wird in this Tutorial verwendet.

Allerdings hat es einen Nachteil:

  • Ich glaube, es wird nicht gut Rotation, die Erhöhung der Statusbar Höhe handhaben, während Anruf oder GPS

Jedes Mal, wenn ich einen Code wie folgt zu sehen (im Artikel geschrieben) Ich weiß, dass es Probleme mit der Größenanpassung geben wird: CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), 64.0)

Sie können es möglicherweise durch Zwänge ersetzen. Ich bin diesen Weg gegangen, stolperte aber über einige Probleme.

6) Andere Methoden

sah ich zwei weitere Methoden. Ich weiß nicht, ob sie funktionieren wird oder was Nachteil sein:

Einer von ihnen in dieser Frage: How to hide/show status bar and navigation bar by fading in/out at the same time like the Photos app in iOS 7?

Und diese Antwort: https://stackoverflow.com/a/18063898/422080