第1部分:说明

最近在做一个类似微信语音聊天的功能,在屏幕的底部放一个Button,按下时可以语音说话,松开时将语音发出去。但是做的过程中遇到一个坑:按钮放到页面最底部的时候会延迟touchDown事件。

第2部分:解决步骤

  1. 在网上找了一些回答,好多都是说受到TableView或ScrollView的影响,但尝试去掉TableView后依然没有解决。
  2. 考虑是不是UI层级太深,影响到事件的响应,尝试减少到一个层级后依赖无效。
  3. 后来干脆新建了一个UIViewController,页面上只放了一个UIButton,去掉任何多余的代码(这样可以不排队其它因素的干扰)发现还是有问题。
  4. 设想是不是Button只放到底部才有问题,果断尝试将Button放到屏幕的上面、中间、下面测试,发现只有有下面的会延迟touchDown。又尝试将该按钮往上移动一点点,发现往上移动二三十的距离的时候就没有问题了。这个时候果断猜测是系统的一个坑。
  5. 经过了解是WWDC 2017之后对UIKit在iOS系统下新增了一些API:
- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(watchos, tvos);

该方法表示屏幕边缘的手势动作(Screen Edge Gesture),一般来说都是由系统管理的,在控制器下重写这个方法,可以让自己的手势优先被调用。

第3部分:最终解决方案

很简单,在你的UIViewController中重写该方法,添加以下代码即可。

- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures {
    return UIRectEdgeBottom;
}

第4部分:总结

感觉这应该是苹果在开发时忽略的一个bug,虽然最终要解决它不是很复杂,但是找到解决方案还是耗费了不少时间,这样的问题还真的是挺坑的,在此记录一下。

iOS UIButton放到页面底部延迟响应touchDown事件相关推荐

  1. iOS UIButton 延迟响应touchDown事件

    底部按钮响应延迟的问题.在UIViewController重写该方法. - (UIRectEdge)preferredScreenEdgesDeferringSystemGestures {retur ...

  2. html中如何把一个div放到页面底部,html – 如何将DIV锚定到页面的底部?

    看到css-tricks: CSS: #footer { position:fixed; left:0px; bottom:0px; height:30px; width:100%; backgrou ...

  3. IOS唤起键盘后--导致页面底部空白问题

    场景: 在写微信项目的时候, 经常会遇到一些表单项.对于移动端项目,input(输入框)聚焦时,都会唤起设备键盘,内容输入完成,点击 "完成" 按钮,设备键盘消失,页面正常显示. ...

  4. js禁止苹果页面底部滚动_Vue.js 实现禁止 h5 页面在 ios 浏览器内置的下拉 bounce 效果...

    介绍 vue-disbounce是一款基于Vue.js的自定义组件,可以有效避免触发h5页面在ios浏览器内置的下拉bounce效果. 组件 :style="{'background-col ...

  5. iOS进阶之页面性能优化

    作者: hi_xgb 地址: http://www.jianshu.com/p/1b5cbf155b31 前言 在软件开发领域里经常能听到这样一句话,"过早的优化是万恶之源",不要 ...

  6. 关于iPhone X下Home Indicator(白条)的隐藏和延迟响应

    iPhone X Edge Protect 在iPhone X 中通知中心和控制中心全部都移动到了由顶部刘海处下拉和右上角下拉来触发.原本底部的所有手势都被Home Indicator占用.其实Edg ...

  7. Android11键盘弹出动画,(2016-11-04完美解决)移动端iOS第三方输入法遮挡底部input及android键盘回落后留白问题...

    问题概述 问题1:H5 web 移动端 输入框, 键盘唤起后fixed定位好的元素跟随页面滚动了起来- fixed属性失效了!满屏任性横飞, 如下图: 问题2:有几后来含些在到气时按式近篇来又的方浏消 ...

  8. IOS手机端页面在项目中遇到的一些问题及解决办法

    1.解决页面使用overflow: scroll在iOS上滑动卡顿的问题? 首先你可能会给页面的html和body增加了height: 100%, 然后就可能造成IOS上页面滑动的卡顿问题.解决方案是 ...

  9. Xamarin iOS教程之页面控件

    Xamarin iOS教程之页面控件 Xamarin iOS 页面控件 在iPhone手机的主界面中,经常会看到一排小白点,那就是页面控件,如图2.44所示.它是由小白点和滚动视图组成,可以用来控制翻 ...

最新文章

  1. POJ - 2763 Housewife Wind LCA+dfs序+线段树
  2. 忍不住也谈招聘应聘程序员的事
  3. 电脑销售渠道_“新冠”影响下,平板电脑市场再现新商机
  4. 【控制】根轨迹分析及绘制
  5. python reduce函数_Python reduce函数作用及实例解析
  6. python教程怎么抓起数据_介绍python 数据抓取三种方法
  7. floyd判环算法(龟兔赛跑算法)
  8. redhat9Linux解压gz,linux (redhat9)下subversion 的安装
  9. guava限流器RateLimiter原理及源码分析
  10. SpatiaLite空间索引(一)
  11. ubuntu12.04中安装SVN记录
  12. Kubernetes 小白学习笔记(17)--集群安全-APIServer的安全模型
  13. 振动试验条件及试验标准
  14. 计算机科学和机器学习中的代数、拓扑、微积分和最优化理论
  15. 运算放大器基本参数—压摆率(直观解释)
  16. 文本分类---逻辑回归(1)
  17. EximiousSoft Logo Designer (Crack)版,轻松设计logo的软件
  18. 虚幻gameframe_Unreal Engine 4 Gameplay框架介绍
  19. CLion - 卸载
  20. python开发板卡驱动开发_IC卡驱动程序开发

热门文章

  1. SLR分析2及文法汇合
  2. 链路追踪——【Brave】第一遍小结
  3. 两表联查分组_join多表连接和group by分组
  4. 已解决Retrying(Retry (total=4, connect=None,read=None,redirect=None,status=None)) after connection brok
  5. Fortify安全扫描Java Android 代码审计 问题及解决方案整理
  6. 数据库 Too many connection异常解决
  7. javase之序列化与反序列化
  8. pywin32下载方法
  9. Android 开机启动慢的原因分析
  10. cordova之hooks