Condividere tutti i miei risultati.
modalità Reclami su
Francamente, mi sento mezzo incazzato/come un manichino che ho dovuto lottare un buon giorno per implementare cosa semplice esistente in Apple App.
modalità Reclami off
Prima di tutto ecco alcune contesto. Sto lavorando con navigationBar che sono forniti da navigationController (vs solo barre autonome che sono cadute manualmente nella tua vista)
Ci sono diversi approcci che ho trovato. Ne cito tutti loro (anche se non ho avuto successo con loro)
1) Animare cambiamento di alfa del navigationBar
UIView.animateWithDuration(0.1, animations: {
navigationController?.navigationBar.alpha = 0
}, completion: nil)
menzione @rmaddy qui che funziona per lui. Tuttavia, credo che abbia una barra indipendente (contro una barra gestita da navigationController).
Ho utilizzato uno strumento Reveal per controllare la gerarchia dell'interfaccia utente e ho trovato un paio di cose. - C'è una barra di navigazione che è nascosta (e navigationController?.navigationBar
fa riferimento a esso). Quindi puoi cambiare l'alfa alla gioia del tuo cuore, ma queste modifiche non saranno visibili.
C'è tuttavia un'altra barra di navigazione. Presumo che sia referenziato in alcuni membri privati di navigationController (chiamiamolo private navigationBar). È visibile e questo è ciò che viene visualizzato nella parte superiore della visualizzazione.
2) Uso setNavigationBarHidden: animato:
Questo è un modo standard per nascondere/mostrare barra di navigazione. È animato in modo diverso (scorre/su e giù). Tuttavia, se è ok per te, vai con questo, perché è semplice e pulito.
navigationController?.setNavigationBarHidden(true, animated: true)
Inoltre è possibile avvolgere in UIView.beginAnimations, UIView.commitAnimations per animare insieme ad alcune altre cose (per renderlo più morbido)
3) Anima cambiamento di alpha di barra di navigazione privata.
questo ha funzionato per me:
let privateNavigationBar = self.superview?.superview?.superview?.superview?.superview?.superview?.subviews[1]
UIView.animateWithDuration(0.1, animations: {
privateNavigationBar.alpha = 0
}, completion: nil)
ho intenzione strada attraverso la gerarchia per ottenere una vista che contiene navigationBar privata (che è la seconda visualizzazione secondaria per quella vista).
Tuttavia, questo approccio ha più lati negativi:
- Credo ° superviews? dipende dalla tua gerarchia di app (vs stai utilizzando la visualizzazione divisa e così via). Penso che puoi generalizzare o potresti semplicemente percorrere l'intera gerarchia per trovare non nascosto
UINavigationBar
per risolvere questo problema.
- ho la sensazione che Apple potrebbe cipiglio a questo (la vostra applicazione non essere accettato all'AppStore)
4) Fare navigationBar trasparente e l'immagine di sfondo impostato per essere trasparenti e cambiare canale alfa su di esso.
Non riesco a trovare dove leggo di questa idea. C'erano un paio di menzioni.
C'è Apple example app che mostra come personalizzare NavigationBar, anche rendendolo trasparente.
È interessante notare che questa app di esempio funziona per me (la barra di navigazione è trasparente). Tuttavia, quando ho provato questo codice nella mia app non ha funzionato (non ho ancora capito cosa sta succedendo con questo). Come al solito ci sono sacco di variabili (può essere qualcosa in Info.plist, anche loro sottoclasse navigationController, può anche essere qualcosa in gerarchia della vista)
5) Aggiunta standalone navigationBar
È possibile nascondere un bar fornito da navigationController. Aggiungi il tuo a UIView, collegalo a @IBOutlet e usa l'animazione alfa su di esso (molto probabilmente questo è ciò che @rmaddy si riferiva anche tu).
Ho controllato e questo è lavoro.
Questo approccio è utilizzato nel tutorial this.
Tuttavia, ha un rovescio della medaglia:
- credo che non gestirà la rotazione bene, aumento di altezza di stato mentre chiamata o GPS
Ogni volta che vedo un codice come questo (scritto nell'articolo) So che ci saranno problemi con il ridimensionamento: CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), 64.0)
È possibile sostituirlo con vincoli. Sono andato su questa strada, ma inciampo su alcuni problemi.
6) Altri metodi
ho visto altri due metodi. Non so se funzionerà o quello che sarà lati negativi:
Uno di loro in questa domanda: How to hide/show status bar and navigation bar by fading in/out at the same time like the Photos app in iOS 7?
E questa risposta: https://stackoverflow.com/a/18063898/422080
E il 'UINavigationController setNavigationBarHidden: animato: metodo' ? – rmaddy
BTW - Ho un'app che anima la proprietà 'alpha' di' navigationBar' e funziona perfettamente. Non sei sicuro del motivo per cui dici che non funziona più. Provalo. – rmaddy
@rmaddy Mostra e nasconde la barra di navigazione. Tuttavia, usa diverse animazioni. Lo fa scorrere su e giù (vs dissolvenza in entrata e in uscita) –