ページを下にスクロールすると、ツールバーとナビゲーションバーが非表示になります。そして、上にスクロールして戻ります。これはどのようにして可能ですか?
ドラッグを検出するにはどうすればよいですか?パンジェスチャーを使用しますか、それともスクロールビューで下に移動しますか?
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
}
私の意見では、Tableviewでナビゲーションバーを処理する適切な方法は次のとおりです。これは、Tableviewにセクションヘッダーがある場合に当てはまります。
func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
if scrollView.panGestureRecognizer.translation(in: scrollView).y < 0 {
navigationController?.setNavigationBarHidden(true, animated: true)
} else {
navigationController?.setNavigationBarHidden(false, animated: true)
}
}
UITableView
またはUICollectionView
以外のコンポーネントを使用していたため、これをスクロールビューに実装しました。うまくいくかどうかはわかりませんが、私にとっては完全に機能しています。
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)
}