【问题标题】:covering stackview with a transparent button用透明按钮覆盖stackview
【发布时间】:2018-02-25 19:14:44
【问题描述】:

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

view
  stackview
     imageview
     button
     button
or
image|button|button

我想在这个堆栈视图中添加一个透明按钮,覆盖所有三个视图,以便在用户单击它时分配一个操作。但我不知道该怎么做?有什么诀窍可以做到这一点吗?

【问题讨论】:

  • 你为什么不添加一个手势呢?

标签: ios swift stackview


【解决方案1】:

添加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),
])

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

【讨论】:

  • @是的,如果您描述的技巧有效,那么我会将内部按钮更改为标签。我会尝试这个建议并更新结果。
  • 实际上,由于布局比我所描述的复杂一点,这并没有奏效。在上述场景中,由于设计原因,我有多个堆栈视图。我在垂直堆栈视图中有一行图像、标签、图像,在另一个水平堆栈视图中还有另一行视图,它们都在垂直堆栈视图中。按照建议添加一个按钮并不困难。您的建议很有用,但我按如下方式解决了它,我删除了两个水平堆栈视图并使用'UIVIEW 来保存图像、标签、按钮,然后将两个 UIViEW 添加到垂直堆栈视图中。这行得通。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2014-03-16
    • 2016-12-10
    • 2011-06-09
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多