【问题标题】:'Hide nav bar on swipe' never returns“滑动时隐藏导航栏”永远不会返回
【发布时间】:2017-10-02 09:13:54
【问题描述】:

我在我的视图控制器中创建了一个视差类型的滚动效果(或弹性标题)。

我有一个 uiscrollview,它固定在窗口边缘。在这里面我有一个视图,它用 0 常量约束锚定到滚动视图,并设置为相等的宽度。 该视图内部是内容。内容的顶部是一个图像,它使用两个约束锚定到窗口的顶部(安全区域指南)。 首先是常量=0 优先级=750。 其次是常数

这行得通..当我向上滚动时,一切都会向上滚动。当我从顶部向下滚动时,图像会拉伸然后弹回。

问题:我正在尝试实现导航栏以在用户滚动时隐藏。我已将此代码添加到视图控制器:

override func viewDidAppear(_ animated: Bool) {
        navigationController?.hidesBarsOnSwipe = true
    }

当我向上滚动时,这可以正常工作(导航栏会淡出并向上动画直到隐藏),但是当我向下滚动时,导航栏不会返回。我认为它被固定在窗口顶部的图像以某种方式隐藏了。但是如何调整/重新附加导航栏?

xcode 9 - 快速 4

【问题讨论】:

标签: ios swift xcode uinavigationcontroller


【解决方案1】:

试试下面的代码可能会有帮助。

确保您应该采用UIScrollView 中的delegate 并实现scrollViewDidScroll 委托方法。

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let scrollOffset: Float = Float(scrollView.contentOffset.y)
    if scrollOffset < 0 {
        navigationController?.hidesBarsOnSwipe = false
        navigationController?.setNavigationBarHidden(false, animated: true)
    }
    else {
        navigationController?.hidesBarsOnSwipe = true
    }
}

【讨论】:

  • 这不太行。向下滚动时,导航栏不能很好地向下滑动,一旦我向下滚动足够远,它就会突然以全高显示。
  • 我给你我的逻辑,你可以根据你的要求自定义。
猜你喜欢
  • 2019-02-24
  • 2016-07-30
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-27
  • 1970-01-01
  • 2014-09-02
相关资源
最近更新 更多