web-dev-qa-db-fra.com

Comment puis-je changer l'index z ou l'ordre de pile de UIView?

J'ai empilé une UIView au-dessus d'un contrôleur existant dans le but de créer une couche de dégradé. Cependant, lorsque je charge la vue, la nouvelle UIView (naturellement) est au-dessus de tout.

Code pertinent:

class ViewController: UIViewController {

    @IBOutlet weak var myGradientView: GradientView!

    override func viewDidLoad() {
        super.viewDidLoad()            
    }

    override func viewDidLayoutSubviews() {
        self.myGradientView.gradientWithColors(UIColor.whiteColor(), UIColor.blueColor())
    }
}

J'ai fait quelques recherches et j'ai trouvé ne réponse dans Objective-C qui explique l'utilisation:

[parentView bringSubviewToFront: view];

Je ne sais pas objectif-c et je suis assez nouveau pour Swift, si quelqu'un pouvait éclairer cela, je l'apprécierais.

Ma question:

Comment modifier l'index z ou l'ordre de pile d'un UIView dans Swift?

35
Dan Beaulieu

Je recommanderais de regarder dans le UIViewdocumentation , où sont énumérées plusieurs méthodes pour la manipulation de l'ordre des sous-vues:

bringSubviewToFront(_:)
sendSubviewToBack(_:)
removeFromSuperview()
insertSubview(_:atIndex:)
insertSubview(_:aboveSubview:)
insertSubview(_:belowSubview:)
exchangeSubviewAtIndex(_:withSubviewAtIndex:)

Dans votre situation, vous pouvez essayer:

self.view.sendSubviewToBack(myGradientView)
// self is your view controller in this case.

Sinon, étant donné que vous avez créé le myGradientView dans IB, vous pouvez modifier la hiérarchie des vues pour modifier les vues apparaissant en haut. Voici une photo pour illustrer:

enter image description here

J'espère que ça t'as aidé.

70
ABakerSmith

la réponse ci-dessus de

bringSubviewToFront(_:) sendSubviewToBack(_:)

a changé:

Dans Swift 3.

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