UIView 中的按钮在点击时没有效果

Posted

技术标签:

【中文标题】UIView 中的按钮在点击时没有效果【英文标题】:Buttons in UIView are not having an effect when tapped 【发布时间】:2019-01-29 19:28:44 【问题描述】:

我在主视图控制器上使用带有按钮的视图。直到最近,当我开始处理约束以使事物在视觉上看起来更好时,我的按钮才能正常工作。调整一些尺寸和约束后,按钮停止工作。

这是我的设置: 我有一个自定义视图,我在其中设置了 3 个按钮并向它们添加了约束

    override init(frame: CGRect) 
        super.init(frame: frame)

        let buttonSize: CGFloat = 90.0

        addSubview(photoButton)
        photoButton.anchor(top: nil, leading: nil, bottom: bottomAnchor, trailing: nil, padding: .init(top: 0, left: 0, bottom: 0, right: 0), size: .init(width: buttonSize, height: buttonSize))
        photoButton.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true

        addSubview(homeButton)
        homeButton.anchor(top: nil, leading: nil, bottom: bottomAnchor, trailing: photoButton.leadingAnchor, padding: .init(top: 0, left: 0, bottom: 0, right: 20), size: .init(width: buttonSize, height: buttonSize))

        addSubview(profileButton)
        profileButton.anchor(top: nil, leading: photoButton.trailingAnchor, bottom: bottomAnchor, trailing: nil, padding: .init(top: 0, left: 20, bottom: 0, right: 0), size: .init(width: buttonSize, height: buttonSize))
    

在我的主视图控制器中,我为按钮添加了目标,以便在点击它们时调用函数。

let buttonView = HomeBottomControlsView()

在我看来确实加载了

        buttonView.homeButton.addTarget(self, action: #selector(openTrending), for: .touchUpInside)
        buttonView.profileButton.addTarget(self, action: #selector(openProfile), for: .touchUpInside)

        view.addSubview(overallStackView)
        view.addSubview(buttonView)

        overallStackView.translatesAutoresizingMaskIntoConstraints = false
        overallStackView.anchor(top: view.safeAreaLayoutGuide.topAnchor, leading: view.leadingAnchor, bottom: view.safeAreaLayoutGuide.bottomAnchor, trailing: view.trailingAnchor)
        overallStackView.isLayoutMarginsRelativeArrangement = true
        overallStackView.layoutMargins = .init(top: 10, left: 12, bottom: 95, right: 12)

        buttonStackView.anchor(top: overallStackView.bottomAnchor, leading: view.leadingAnchor, bottom: view.safeAreaLayoutGuide.bottomAnchor, trailing: view.trailingAnchor, padding: .init(top: 0, left: 0, bottom: 0, right: 0), size: .init(width: 0, height: 0))

这些按钮以前可以工作,直到我开始使用自动布局约束。现在我似乎无法再让按钮成为可点击的了。

我正在阅读其他问题,由于初始帧的问题,按钮有时无法工作。是这里的问题吗?

【问题讨论】:

使用视图调试器查看是否存在约束问题或超视图问题。 你的overallStackView 占据了整个视图。并且您将 buttonStackView 的顶部约束设置为overallStackView 的底部锚点。那永远行不通。 @GaloTorresSevilla 谢谢!我现在先设置了 buttonStackView 约束,然后将 overstackview 的底部约束设置为 buttonStackView 的顶部,它又可以工作了! 我会写一个答案以防你想接受它。很高兴你让它工作。 【参考方案1】:

这个视图已经占据了整个view

overallStackView.anchor(top: view.safeAreaLayoutGuide.topAnchor, leading: view.leadingAnchor, bottom: view.safeAreaLayoutGuide.bottomAnchor, trailing: view.trailingAnchor)

并且您将buttonStackView 的顶部锚点设置为overallStackView 的底部锚点。这就是框架没有正确定位的原因。您需要更改 buttonStackViewoverallStackView 的约束,使它们不会相互重叠

【讨论】:

以上是关于UIView 中的按钮在点击时没有效果的主要内容,如果未能解决你的问题,请参考以下文章

UI-切圆角透明度取消按钮点击高亮效果按钮文字带下划线

UiButton 点击​​在 UIView 上不起作用

swift怎么在点击按钮时重新调用uiview的drawrect函数

移动包含 UIButtons 的 UIView 会使这些按钮停止响应点击

iOS UIButton 点击无响应的解决办法

UIButton在点击时没有显示任何效果?