【问题标题】:Wrong UISearchBar touches area错误的 UISearchBar 触摸区域
【发布时间】:2016-03-12 07:48:32
【问题描述】:

总结

在没有状态栏的视图控制器推送视图控制器后,我得到了错误的 UISearchBar 触摸区域。

说明

UINavigationController 中有两个视图控制器 A 和 B。一个隐藏状态栏,代码如下:

- (BOOL)prefersStatusBarHidden {
    return YES;
}

B 在UINavigationController 标题视图中具有UISearchBar。在此视图中状态栏已启用:

- (UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleDefault;
}

从 A 推 B 后似乎没有任何问题:

但是当我尝试按下测试按钮或状态栏时,触摸识别错误:

当我按下导航栏下的红色区域时,搜索栏和后退按钮变为活动状态。

视频:https://www.youtube.com/watch?v=Jw4kDOFBCIg

小示例项目:https://github.com/leo150/SearchBarTest

有什么想法吗?谢谢

【问题讨论】:

  • 一定是苹果的bug。
  • 您是否尝试添加一个透明的 UIVIEw 作为遮罩来干扰触摸?这是一个令人讨厌的黑客行为,但如果你认为这是一个 serios 错误,值得一试!!!
  • @Mr.T,感谢您的回复。是的,我尝试添加insertSubview: transparentButton aboveSubview: searchBar,但没有成功。通过我的按钮点击搜索栏。

标签: ios objective-c uinavigationcontroller uisearchbar uistatusbar


【解决方案1】:

这实际上是苹果实现的一个错误或特性。我们总是遇到导航栏下方的按钮问题。

Apple 可能这样做是为了更容易点击更突出的 UI 部分(导航栏)。

【讨论】:

  • 总是可以更改 UI 并从导航栏中删除搜索等。但是这里有更正确的方法吗?
【解决方案2】:

就像 Alistra 所说,这是 Apple 为更好的用户体验而实施的。

这是一个相关的线程,有一些解决方法: Why does UINavigationBar steal touch events?

还有一位苹果工程师的official answer

我建议您避免在靠近导航栏或工具栏的位置使用触敏 UI。这些区域通常被称为“倾斜因素”,使用户更容易在按钮上执行触摸事件,而不会遇到执行精确触摸的困难。例如,UIButton 也是如此。

但如果你想在导航栏或工具栏接收到触摸事件之前捕获它,你可以继承 UIWindow 并覆盖:-(void)sendEvent:(UIEvent *)event;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    相关资源
    最近更新 更多