如何更改 UIView 的 z 索引或堆栈顺序?
Posted
技术标签:
【中文标题】如何更改 UIView 的 z 索引或堆栈顺序?【英文标题】:How do I change the z index or stack order of UIView? 【发布时间】:2015-05-12 23:13:29 【问题描述】:我在现有控制器的顶部堆叠了一个 UIView,以创建一个渐变层。但是,当我加载视图时,新的 UIView (自然)位于一切之上。
相关代码:
class ViewController: UIViewController
@IBOutlet weak var myGradientView: GradientView!
override func viewDidLoad()
super.viewDidLoad()
override func viewDidLayoutSubviews()
self.myGradientView.gradientWithColors(UIColor.whiteColor(), UIColor.blueColor())
我进行了一些搜索,发现 an answer in Objective-C 解释了如何使用:
[parentView 带来SubviewToFront:view];
我不知道 Objective-c,而且对 Swift 还很陌生,如果有人能对此有所了解,我将不胜感激。
我的问题:
如何在 Swift 中更改 UIView 的 z 索引或堆栈顺序?
【问题讨论】:
这是两种不同的语言@Ben 别担心,我需要学习如何阅读Objective-C 【参考方案1】:我建议查看UIView
documentation,其中列出了用于操作子视图顺序的几种方法:
bringSubviewToFront(_:) sendSubviewToBack(_:) removeFromSuperview() insertSubview(_:atIndex:) insertSubview(_:aboveSubview:) insertSubview(_:belowSubview:) exchangeSubviewAtIndex(_:withSubviewAtIndex:)
根据你的情况,你可以试试:
self.view.sendSubviewToBack(myGradientView)
// self is your view controller in this case.
另外,因为您在 IB 中创建了 myGradientView
,您可以更改视图层次结构以更改显示在顶部的视图。这是一张图片来说明:
希望对您有所帮助。
【讨论】:
哇...这个更新让我很吃力。我不敢相信我没有弄清楚 如果你有 5 个子视图并且你想将第二个移到最后一个怎么办?【参考方案2】:以上回答
bringSubviewToFront(_:) sendSubviewToBack(_:)
已经改变:
在 Swift 3.0 中
view.sendSubview(toBack:yourUIView)
view.bringSubview(toFront:yourUIView)
在 Swift 4.0 && Swift 5.0 中
view.sendSubviewToBack(yourUIView)
view.bringSubviewToFront(yourUIView)
【讨论】:
添加一些解释,说明此答案如何帮助 OP 解决当前问题以上是关于如何更改 UIView 的 z 索引或堆栈顺序?的主要内容,如果未能解决你的问题,请参考以下文章