如何在Swift的另一个视图前面显示视图?

时间:2016-08-05 03:43:49

标签: ios swift interface-builder

以下是我在应用启动时在IB,top->底部组织视图的方式。

用户可以做一些事情来制作"类别表视图标题"暂时扩展"名称视图" - 但是一旦这样做,.TouchDown操作分配给"类别表视图标题"不再适用于与"名称视图"重叠的任何地方。 (即,用户可以在不与名称视图重叠的任何地方点击标题,它仍然有效。)

enter image description here

我知道这可能令人困惑,所以我抽出了一些盒子。左侧是原件,右侧是用户操作后 - 问题出在右侧,红色框上的操作仅在用户点击下半部而非上半部时才有效。

enter image description here

我的猜测是因为视图层次结构中的标题比名称视图更低,但是我很难在不弄乱一堆约束的情况下更改它。

我也尝试过设置nameView.hidden = true,但这并不起作用。

5 个答案:

答案 0 :(得分:30)

  

如果您想将子视图放在前面,可以使用:

SWIFT 4更新

self.view.bringSubviewToFront(yourView)

SWIFT 3更新

self.view.bringSubview(toFront: yourView)
  

向后发送视图: -

SWIFT 4更新

self.view.sendSubviewToBack(yourView)

SWIFT 3更新

self.view.sendSubview(toBack: yourView)

答案 1 :(得分:7)

Swift 5.1 +

UIKit将视图拉回到最前面,这意味着堆栈上方的视图被绘制在下方视图的顶部。如果您想将子视图置于最前面,则有一种方法适合您:BringSubviewToFront()。这是一个示例:

parentView.bringSubviewToFront(childView)

此方法也可以用于将任何子视图置于最前面,即使您不确定它在哪里:

childView.superview?.bringSubviewToFront(childView)

答案 2 :(得分:4)

您可以使用以下方法控制子视图的顺序:来自superview的bringSubviewToFront和sendSubviewToBack。

您可以使用self.view.subview数组访问superview包含的所有子视图。

答案 3 :(得分:4)

Swift 4.2

将子视图置于最前面

self.view.bringSubviewToFront(yourView)

向后发送子视图

self.view.sendSubviewToBack(yourView)

答案 4 :(得分:1)

该方法自swift 3

以来已更新

什么对我有用,希望对你有用:

YourView.bringSubview(toFront: yourelementA)
YourView.bringSubview(toFront: yourelementB)

或者,您可以使用以下内容发送前面的对象:

YourView.sendSubview(toBack: yourelementC)

我希望这会有所帮助