使用滑动隐藏的 UINavigationBar 会留下一个拦截点击以显示它的区域?

Posted

技术标签:

【中文标题】使用滑动隐藏的 UINavigationBar 会留下一个拦截点击以显示它的区域?【英文标题】:A UINavigationBar that hides using swipes leaves a region that intercepts taps to reveal it? 【发布时间】:2016-03-04 21:21:16 【问题描述】:

我已将 UINavigationController 配置为在滑动时自动隐藏它的 UINavigationBar。上下滑动可以很好地隐藏/显示栏。但是,在导航栏先前占据的屏幕区域中轻按(触摸)会触发导航栏显示,这给我带来了问题。我的视图在屏幕顶部附近放置了一个按钮。当整个应用程序扩展到自动隐藏 UINavigationBar 留下的空间时,点击我的按钮会触发导航栏显示,这很烦人,因为我希望滑动来显示导航栏而不是点击。我认为这是因为按钮已向上移动到导航栏所在的空间。

有什么方法可以防止在点击我的按钮时出现条形图?我想知道是否应该覆盖 UINavigationController 中的 hitTest 以尝试阻止事件传播?

这是我隐藏导航栏的方式:

let navVC = self.navigationController
navVC!.hidesBarsOnSwipe = true
navVC!.hidesBarsOnTap = false

如果我使用 RxSwift 订阅 UINavigationController 的控制事件,我会看到如下事件:

received <_UIBarTapGestureRecognizer: 0x7b6dae30; state = Ended;
    cancelsTouchesInView = NO; view = <UILayoutContainerView 0x7b942bc0>; 
    targets= <("(action=_gestureRecognizedToggleVisibility:, 
        target=<UINavigationController 0x7da79400>)", "(action=eventHandler:, 
        target=<RxCocoa.GestureTarget 0x7b6e1f90>)")>>
    tapCategory=WhereNavigationBarWas

【问题讨论】:

你能分享你的代码吗? 你能告诉我们你是如何隐藏导航栏的吗? @Gordonium 我已经用代码更新了原始问题,以及在隐藏导航栏并点击按钮后我看到的内容。 【参考方案1】:

好吧,除了不让第一响应者向上移动之外,UINavBar 空间似乎没有什么可做的。我最终将我的按钮移动到受影响视图的另一个位置,这解决了我的问题。我和我的伙伴更喜欢新的布局,这是一个奖励。谢谢大家!

【讨论】:

以上是关于使用滑动隐藏的 UINavigationBar 会留下一个拦截点击以显示它的区域?的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationBar 在滚动/滑动隐藏后将不再显示

UINavigationBar 在中断从左边缘手势向右滑动后显示返回按钮,如何隐藏它以及为啥显示它?

UINavigationBar 弹出进出而不是滑动

如何禁用 UINavigationBar 上的向右滑动手势?

隐藏然后重新显示 UINavigationBar 会导致问题

iOS - 导航栏隐藏/显示