web-dev-qa-db-ja.com

下にスクロールするときにナビゲーションバーとツールバーを非表示にする方法は? Swift(myBridgeアプリのように)

ページを下にスクロールすると、ツールバーとナビゲーションバーが非表示になります。そして、上にスクロールして戻ります。これはどのようにして可能ですか?

ドラッグを検出するにはどうすればよいですか?パンジェスチャーを使用しますか、それともスクロールビューで下に移動しますか?

27

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

私の意見では、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)
   }
}
1
rakeshNS

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)
}
0
Septronic