如何更改 UIView 的 z 索引或堆栈顺序?

How do I change the z index or stack order of UIView?

我在现有控制器的顶部堆叠了一个 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 bringSubviewToFront:view];

我不知道 objective-c 并且是 Swift 的新手,如果有人能对此有所启发,我将不胜感激。

我的问题:

如何在 Swift 中更改 UIView 的 z 索引或堆栈顺序?

我建议查看 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,您可以更改视图层次结构以更改显示在顶部的视图。这是一张图片来说明:

希望对您有所帮助。

上面

的回答

bringSubviewToFront(_:) sendSubviewToBack(_:)

已更改:

在Swift3.0

view.sendSubview(toBack:yourUIView)
view.bringSubview(toFront:yourUIView)

在Swift4.0 && Swift5.0

view.sendSubviewToBack(yourUIView)
view.bringSubviewToFront(yourUIView)