Resize d'une NSView, comment faire ?
colas_
Membre
Bonjour,
j'ai une NSView dans mon programme que je voudrais resizer, mais ça ne marche pas.
Je pense que cela est dû (peut-être) aux NSConstraint, qui pourraient bloquer. Au cas où, je mets le xib en pièce jointe.
Je fais, tout simplement, mais rien ne se passe :
- (IBAction)enlarge:(id)sender
{
NSView * theView = self.view ;
[theView invalidateIntrinsicContentSize];
DDLogVerbose(@Agrandissement de la vue);
DDLogDebug(@Alors ? %@", NSStringFromSize(self.view.frame.size));
NSSize newSize = NSMakeSize(self.view.frame.size.width, self.view.frame.size.width +50);
[[theView superview] setNeedsDisplayInRect:[theView frame]];
[self.view setFrameSize:newSize] ;
DDLogDebug(@Alors ? %@", NSStringFromSize(self.view.frame.size));
[theView setNeedsDisplay:YES];
}
D'abord les logs indiquent que la hauteur changent (sur l'écran rien ne bouge), mais un peu plus tard dans le programme, je me rends compte que la hauteur est revenue à la valeur initiale.
Ma question est donc, y'a-t-il une manière de changer la taille d'une NSView qui est munie de contraintes ?
Merci !
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Effectivement si tu utilises l'autolayout il ne sert à rien de modifier la frame de la vue, elle sera calculée avec les contraintes que tu as définies.
D'après ce que j'ai compris de ton XIB, c'est la super-vue qui va fixer la hauteur de cette vue. Presque tous les éléments à l'intérieur de la vue vont prendre une hauteur en fonction de celle de la super-vue car il y a peu d'éléments pour lesquels une contrainte de hauteur a été définie.
J'ai avancé sur le problème, mais ça ne marche toujours pas.
Voilà ce que j'ai fait :
1) J'ai ajouté dans IB une contraint pour la hauteur ("pin" height).
2) J'ai créé un IBOutlet pour cette constraint pour y avoir accès dans le code.
3) je modifie l'attribut "constant" de cette constraint.
Mais ça ne marche pas.
Comme je fais le point 3), il y a un conflit avec une autre constraint. Il semble que quelquepart, la hauteur de ma vue soit transformée en constraint. Pourtant, je ne vois aucune constraint comme telle dans la liste des constraints dans IB. Savez-vous si effectivement il y a un tel "transfert" entre dimensions de la vue et constraints et si oui : comment voir ces contraintes et/ou les bloquer.
Merci !
Bonsoir,
As-tu réellement besoin des contraintes? Il me semble qu'il est toujours possible de s'en passer. Cette option me paraà®t surtout utile pour les applications iOS qui tournent en tout sens selon l'orientation de l'appareil...
Le fait de changer la taille d'une NSView par code me paraà®t en contradiction avec le principe même des contraintes, en tout cas.
Le problème venait de mon code.
À un autre endroit du programme, j'avais déjà ajouté des constraints.
@Berfis : je pense que je vais garder cette façon de faire.