web-dev-qa-db-fra.com

Comment masquer la barre de navigation et la barre d'outils en faisant défiler vers le bas? Swift (comme l'application myBridge)

Je souhaite masquer une barre d'outils et une barre de navigation lorsque je fais défiler une page. Et retournez-le en faisant défiler vers le haut. Comment est-ce possible?

Comment pourrais-je détecter la traînée? Dois-je utiliser le mouvement panoramique ou est-ce que cela se produit avec la vue de défilement?

27
Lyndon King McKay

Swift 5 Xcode 10.3

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationController?.hidesBarsOnSwipe = true
  }
override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    navigationController?.hidesBarsOnSwipe = false
  }
1
Ahmed Abdallah

À mon avis, la manière appropriée de gérer la barre de navigation dans Tableview est la suivante. Cela serait applicable si nous avons l'en-tête de section dans Tableview.

func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
   if scrollView.panGestureRecognizer.translation(in: scrollView).y < 0 {
      navigationController?.setNavigationBarHidden(true, animated: true)

   } else {
      navigationController?.setNavigationBarHidden(false, animated: true)
   }
}
1
rakeshNS

J'ai implémenté cela dans mon scrollview, car j'utilisais des composants autres que UITableView ou UICollectionView, je ne sais pas si cela fonctionne pour vous, mais cela fonctionne parfaitement pour moi:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let totalTop = (UIApplication.shared.statusBarFrame.size.height ?? 0) + (self.navigationController?.navigationBar.frame.height ?? 0)
    let shouldHideNavBar = scrollView.contentOffset.y > -(totalTop - 20) // 20 is an arbitrary number I added to compensate for some of scrolling
    navigationController?.setNavigationBarHidden(shouldHideNavBar, animated: true)
}
0
Septronic