我有一个包含集合视图的视图控制器。在集合视图中,我有一个表视图。每当我滚动表格视图时,导航栏都应隐藏。
如何隐藏导航栏?
答案 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()