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?
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
}
À 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)
}
}
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)
}