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最新系统中点击键盘上的“完成”导致事件无法触发问题
触摸事件仅在iPad iOS 11.4上的Mobile Safari中滚动时触发“一次”