如何在滚动集合视图内的表视图时隐藏导航栏

时间:2018-01-30 11:54:21

标签: ios swift uitableview uinavigationcontroller uicollectionview

我有一个包含集合视图的视图控制器。在集合视图中,我有一个表视图。每当我滚动表格视图时,导航栏都应隐藏。

  1. 查看控制器
  2. 集合视图---集合视图单元格
  3. 表格视图----表格视图单元格
  4. 如何隐藏导航栏?

3 个答案:

答案 0 :(得分:1)

您可以使用scrollview委托方法隐藏和显示导航栏。 检查以下方法

func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
    self.navigationController?.setNavigationBarHidden(true, animated: true)
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
    if decelerate == false {
        self.navigationController?.setNavigationBarHidden(false, animated: true)
    }
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    self.navigationController?.setNavigationBarHidden(false, animated: true)
}

希望它对你有用。

答案 1 :(得分:1)

在具有UITableView

的collectionViewCell上创建委托方法
@objc protocol CollectionViewCellDelegate {
  func didScroll(scrollView: UIScrollView) 
  func didEndDecelerating()
  func didEndDragging(scrollView: UIScrollView)
}

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    self.delegate.didScroll(scrollView)
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
    self.delegate.didEndDragging(scrollView)
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    self.delegate.didEndDecelerating()
}

并在ViewController上实现这些委托方法,该方法具有UICollectionView以隐藏导航栏

答案 2 :(得分:0)

在这些方法中使用观察者来实现你的目标

func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
    NotificationCenter.default.post(name: 
    NSNotification.Name("ScrollStart"), object: nil)
}

func scrollViewDidEndDragging(_ scrollView: UIScrollView, 
    willDecelerate decelerate: Bool) {
    NotificationCenter.default.post(name: 
    NSNotification.Name("ScrollEnd"), object: nil)
}

现在要隐藏导航栏的位置添加该控制器的视图didload()以下代码

NotificationCenter.default.addObserver(self, selector: 
     #selector(self.hideNavigationMethod), name: 
 NSNotification.Name("ScrollStart"), object: nil)

同样显示导航栏

NotificationCenter.default.addObserver(self, selector: 
     #selector(self.showNavigationMethod), name: 
NSNotification.Name("ScrollEnd"), object: nil)

现在实现方法hideNavigationMethod()和showNavigationMethod()