Mon contrôleur de vue possède un NSView que j'utilise en tant que conteneur. J'ai fait glisser la "Vue Conteneur" de la bibliothèque, supprimé le contrôleur de vue et embarqué, ajouté des contraintes à la vue supérieure (voir la vue principale du contrôleur) et mis en place une vue dans le conteneur.Affichage de conteneur dans Cocoa, échange de contenu au moment de l'exécution et conservation de la taille
Jusqu'ici tout va bien.
Je souhaite permuter le contenu de la vue conteneur avec la vue principale de plusieurs contrôleurs de vue différents, déterminée lors de l'exécution. J'ai réussi à le faire, avec le code comme ceci:
func swapContainerViewContents(with viewController: NSViewController) {
self.containerView.subviews.foreach({ subview in
subview.removeFromSuperview()
})
containerView.addSubview(viewController.view)
}
Cela fonctionne, mais dès que je redimensionnez la fenêtre, la vue enfant reste évidemment à sa taille d'origine (je n'ai pas mis en place aucune contrainte) .
Si, au contraire, j'ajouter les contraintes nécessaires:
let newView = viewController.view
containerView.addSubview(newView)
newView.leftAnchor.constraint(equalTo: containerView.leftAnchor).isActive = true
newView.rightAnchor.constraint(equalTo: containerView.rightAnchor).isActive = true
newView.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true
newView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true
... maintenant, la fenêtre ne peut pas être redimensionnées! (il est bloqué à la taille initiale de la sous-vue).
Quelle est la façon de faire cela?