2017-10-02 1 views
1

J'ai créé un effet de défilement de type parallaxe (ou en-tête extensible) dans mon contrôleur de vue.'Masquer la barre de navigation sur le balayage' ne retourne jamais

J'ai un uiscrollview, qui est ancré aux marges des fenêtres. À l'intérieur de ceci j'ai une vue, qui est ancrée avec 0 contraintes constantes à la vue de défilement, et réglée aux largeurs égales. À l'intérieur de cette vue se trouve le contenu. Au sommet du contenu est une image, et cela est ancré au haut de la fenêtre (guide de zone de sécurité) en utilisant deux contraintes. La première est constante = 0 priorité = 750. Deuxième est constante < = 0 priorité = 1000.

Cela fonctionne .. quand je fais défiler tout défile vers le haut. Lorsque je défile vers le bas, l'image s'étire et rebondit.

Question: J'essaye d'implémenter également la barre de navigation pour cacher quand l'utilisateur défile. J'ai ajouté ce code au contrôleur de vue:

override func viewDidAppear(_ animated: Bool) { 
     navigationController?.hidesBarsOnSwipe = true 
    } 

Cela fonctionne bien quand je défiler vers le haut (les fades de la barre de nav et anime jusqu'à caché), mais quand je défiler vers le bas la barre de navigation ne retourne pas. Je suppose qu'il est caché en quelque sorte par l'image qui est ancrée au sommet de la fenêtre. Mais comment puis-je ajuster/rattacher la barre de navigation?

Xcode 9 - rapide 4

+0

possible en double https://stackoverflow.com/questions/40667985/how-to-hide-the-navigation-bar-and-toolbar-as-scroll-down-swift-like-mybridge/40670196# 40670196 – Joe

Répondre

0

Essayez avec le code ci-dessous pourrait être l'aide.

Assurez-vous de prendre delegate de UIScrollView et d'implémenter la méthode scrollViewDidScroll.

func scrollViewDidScroll(_ scrollView: UIScrollView) { 
    let scrollOffset: Float = Float(scrollView.contentOffset.y) 
    if scrollOffset < 0 { 
     navigationController?.hidesBarsOnSwipe = false 
     navigationController?.setNavigationBarHidden(false, animated: true) 
    } 
    else { 
     navigationController?.hidesBarsOnSwipe = true 
    } 
} 
+0

Cela ne le fait pas tout à fait. Lorsque vous faites défiler la barre de navigation ne glisse pas bien, il apparaît soudainement à pleine hauteur une fois que j'ai fait défiler assez loin. – Lee

+0

Je vous donne ma logique que vous pouvez personnaliser selon vos besoins. – iPatel