UINavigationBar 为 UIScrollView 注册触摸

Posted

技术标签:

【中文标题】UINavigationBar 为 UIScrollView 注册触摸【英文标题】:UINavigationBar registering touches for UIScrollView 【发布时间】:2013-01-11 05:35:28 【问题描述】:

我创建了一个应用程序,其中我有一个大滚动视图(两个页面高度),并且导航栏是可见的。此外,我进行了设置,以便滚动视图开始滚动到底部页面,并且 UIScroll 视图未注册 30px 标记以下的触摸(例如,如果您触摸导航栏下方超过 30px,您将能够按下按钮但不滚动 UIScrollView)。这一切都非常有效,让我可以让你看起来像是从上面拉下一扇窗户,所有这些都是一个整洁的效果。

问题在于,在用例测试中,许多用户似乎敲得太高(点击 UINavigationBar),因此他们试图拉下窗口的滑动手势没有被读取。基本上,如果触摸从导航栏开始,整个手势将被忽略。这会导致用户感到沮丧(知道他们应该能够下拉窗口但不能)或认为下拉已因某种原因被禁用。

我想实现一种方法,如果用户的触摸从 UINavigationBar 内开始但不在导航按钮上,则触摸将传递给 UIScrollView。这可能吗?如果可以,我该怎么做?

【问题讨论】:

我使用了类似于this solution 的东西来获得我上面提到的效果,只有从顶部开始滚动视图才会滚动。 【参考方案1】:

尝试使用自定义导航栏。从 UINavigation 栏继承,然后在你想要的地方添加一个子视图,并在那里添加一个手势。

【讨论】:

我可以向默认 UINavigationBar 添加一个子视图,它上面有一个手势识别器,但如果可能的话,我宁愿将触摸直接传递给滚动视图,而不是使用单独的手势识别器。跨度> @Doc 但我不确定它是否会在导航栏边缘和视图顶部一起显示手势。 我最终求助于这个来达到目的。老实说,这不是我想要的,但至少它解决了主要问题。

以上是关于UINavigationBar 为 UIScrollView 注册触摸的主要内容,如果未能解决你的问题,请参考以下文章

为所有导航栏 (UINavigationBar) iOS 5.1+ 设置按钮和外观

UINavigationBar 为 UIScrollView 注册触摸

Xcode 7.3.1:将背景图像设置为 UINavigationBar 并显示返回按钮

UINavigationBar 中的多色后退按钮

UINavigationBar

使用静态 UITableView 时将透明背景设置为 UINavigationBar 会导致过渡效果不佳