【问题标题】:iOS: Click events not being triggered only on iOS 13iOS:仅在 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) }

标签: ios xib ios13 ibaction


【解决方案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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 2018-04-18
    • 2020-12-27
    相关资源
    最近更新 更多