用透明按钮覆盖堆栈视图

covering stackview with a transparent button

我有一个带有 3 个子视图(一个图像视图、一个按钮和另一个带有图像的按钮)的水平堆栈视图,如下所示,

view
  stackview
     imageview
     button
     button
or
image|button|button

我想向此 stackview 添加一个透明按钮,覆盖所有三个视图,以便我可以在用户单击它时分配一个操作。但我不知道该怎么做?有什么技巧可以实现吗?

在添加stackView后直接添加到view(这样会在stackView之后渲染):

view
   stackView
      imageview
      button
      button
   transparentButton

这里的技巧是,如果 view.addSubview(stackView) 后面跟着 view.addSubview(transparentButton),那么 transparentButton 会呈现在 stackView 及其内容之上,它会得到触摸事件而不是后面的内容。

然后添加约束,使其复制 stackView 框架:

NSLayoutConstraint.activate([
    transparentButton.leftAnchor.constraint(equalTo: stackView.leftAnchor),
    transparentButton.rightAnchor.constraint(equalTo: stackView.rightAnchor),
    transparentButton.topAnchor.constraint(equalTo: stackView.topAnchor),
    transparentButton.bottomAnchor.constraint(equalTo: stackView.bottomAnchor),
])

虽然我必须说,你想要添加一个按钮来覆盖其他按钮似乎有点奇怪。也许您想将 stackView 中的那些按钮替换为 UILabels.

您不能在 stackView 中添加一个与其他项目具有特定对齐方式的项目,您应该在同一层次结构中创建透明按钮,其框架等于 stackView 的框架,或者使用自动布局设置它顶部、底部、前导和尾随