使用滑动隐藏的 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 上的向右滑动手势?