是否可以在UIScrollView中删除UIButton突出显示状态的延迟?

pix*_*eak 29 cocoa-touch objective-c ios swift

我注意到如果UIButton位于UIScrollView(或表视图)中,则在触发时会突然显示UIButton的突出显示状态.否则,突出显示的状态几乎是瞬间完成的.

我猜测这必须是按设计的,以便为用户提供滚动的机会.但似乎按钮对我没有反应.有没有办法来解决这个问题?

Can*_*Can 60

实际上,这是一个设计选择.需要这么短的时间来区分滚动(panGesture)和水龙头.如果您消除了此延迟,则用户将手指放在按钮顶部时将无法滚动,这不是良好的用户体验.

因为滚动视图没有滚动条,所以它必须知道触摸是否表示滚动意图与跟踪内容中的子视图的意图.为了做出这种确定,它通过启动计时器暂时拦截触碰事件,并且在计时器触发之前,查看触摸手指是否进行任何移动.如果计时器在没有显着位置变化的情况下触发,则滚动视图将跟踪事件发送到内容视图的触摸子视图.

来自UIScrollView文档

我不建议禁用延迟,但如果你坚持,你可以在界面构建器中设置它(选择滚动视图,在右侧面板上,在"Bounces Zoom"下面),或者使用以下代码:

scrollView.delaysContentTouches = false
Run Code Online (Sandbox Code Playgroud)

  • @pixelfreak创建一个可以同时执行这两者的自定义滚动视图并非不可能,但iOS用户习惯于这种行为,如果你没有搞乱基本的iOS用户交互概念会更好. (2认同)