Swift:将视图从堆栈视图带到前面

Posted

技术标签:

【中文标题】Swift:将视图从堆栈视图带到前面【英文标题】:Swift: Bring View from Stack View to front 【发布时间】:2017-10-16 22:35:28 【问题描述】:

我有一个堆栈视图,其中视图:1、2、3、4 和 5

寻找一种方法,将 View4 中的 Image View4 带到 Stack 视图中,高于所有其他视图。我需要这个的原因是因为我将 Image View4 移动到 view3 中的 Image View3 上。

我试图在视图层次结构中将 view3 移到 view4 上,但这只是交换了它们在堆栈视图中的位置。

【问题讨论】:

【参考方案1】:

来自UIStackView documentation:

subviews 数组中的 [视图] 的顺序定义了子视图的 Z 顺序。如果视图重叠,索引较低的子视图会出现在索引较高的子视图后面。

因此,由于堆栈视图的 arrangedSubviews 数组中的所有视图也在堆栈视图的 subviews 数组中,因此您应该能够使用标准的 UIView API 重新排列视图 z 顺序:

bringSubview(toFront:) sendSubview(toBack:) exchangeSubview(at:withSubviewAt:)

我不知道这是否可以在 Interface Builder 中完成。

【讨论】:

【参考方案2】:

使用addSubview(_:)从堆栈视图中删除图像并将其添加到包含堆栈视图的同一视图中作为子视图。这将把它放在所有其他视图之上。您也可以使用insertSubview(_:aboveSubview:) 将其直接插入到堆栈视图上方。

您需要向新视图添加约束,以便将其定位在您想要的位置。

【讨论】:

【参考方案3】:

您可以在 UIViewController 中拥有 IBOutlet 属性,但在视图层次结构中它被放置在 UIStackView 中。 所以你应该使用

stackView.bringSubviewToFront(myView)

然后

self.view.bringSubviewToFront(myView)

【讨论】:

以上是关于Swift:将视图从堆栈视图带到前面的主要内容,如果未能解决你的问题,请参考以下文章

Swift UIView 从堆栈视图中消失

Swift - 以编程方式向堆栈视图添加标签

swift 从导航堆栈中获取以前的视图控制器

在 Swift 中 segue 后从堆栈中删除(删除)视图/视图控制器的正确方法

水平堆栈视图新行 - Swift

如何在我的 Xcode Swift 项目的不同导航堆栈中从一个视图控制器屏幕切换到另一个?