iOS:仅在 iOS 13 上不会触发点击事件

Posted

技术标签:

【中文标题】iOS:仅在 iOS 13 上不会触发点击事件【英文标题】:iOS: Click events not being triggered only on iOS 13 【发布时间】:2020-04-15 11:04:28 【问题描述】:

我对旧应用上的按钮单击事件有疑问。对于 ios 版本

这是生成按钮的代码:

override func layoutSubviews() 
     super.layoutSubviews()

     var offsetY = CGFloat(0)

     for view in authenticationViews 
         view.button.frame = CGRect(x: 0, y: offsetY, width: frame.size.width, height: buttonHeight)
         offsetY += buttonsDistance + buttonHeight
         addSubview(view.button)
    

    height = offsetY

我认为约束可能存在问题,但我是 iOS 新手,我不知道应该从这个错误中理解什么以及应该如何修复:

将尝试通过打破约束来恢复 (null) ((null), (null))

【问题讨论】:

您可以做的是使用可视化调试器在运行时检查生成的约束。此外,可以避免在layoutSubviews 中添加子视图,因为可以多次调用该方法。最后,您还可以在操作方法处设置断点,以确保问题确实是您怀疑的问题(顺便说一句,您如何添加目标/操作?) 目标操作在哪里?也分享截图 您可以使用Snapkit 或任何其他方式轻松进行约束。我想你需要像这样制作约束:view.button.snp.makeConstraints make in make.width.equalTo(frame.size.width) make.height.equalTo(buttonHeight) 【参考方案1】:

如果您提供完整的代码,那就太好了,但基于此处提供的代码是建议。

由于layoutSubviews 函数可以被多次调用,您应该将它们移到viewDidLoad 中。

override func viewDidLoad() 
    ...
    for view in authenticationViews 
        addSubview(view.button)
    

要根据布局更改更新视图的框架,您必须将它们放入viewDidLayoutSubviews

override func viewDidLayoutSubviews() 
    super.viewDidLayoutSubviews()

    var offsetY = CGFloat(0)

    for view in authenticationViews 
        view.button.frame = CGRect(x: 0, y: offsetY, width: frame.size.width, height: buttonHeight)
        offsetY += buttonsDistance + buttonHeight
    

    height = offsetY

【讨论】:

以上是关于iOS:仅在 iOS 13 上不会触发点击事件的主要内容,如果未能解决你的问题,请参考以下文章

关于ios上点击事件触发经过导致layui nav跳转的bug

点击事件未在 iOS 上触发

微信公众号弹出框在IOS最新系统中点击键盘上的“完成”导致事件无法触发问题

触摸事件仅在iPad iOS 11.4上的Mobile Safari中滚动时触发“一次”

Mint-ui中loadmore(上拉加载下拉刷新)组件在ios中滑动会触发点击事件的解决方法

在 iOS 设备上的 iframe 中未触发 Click/Tap 事件