2009-09-03 14 views
0

J'ai une NSMatrice qui est remplie dynamiquement avec certains éléments de formulaire. Maintenant, je peux facilement appeler [theMatrix sizeToCells], puis le passer dans le panneau à afficher.Redimensionner un NSPanel pour l'adapter à une NSMatrice dynamique et un bouton

Maintenant, je veux que l'objet NSPanel qui contient cette NSMatrix soit redimensionné pour l'entourer. Le NSPanel a également un bouton en bas qui devrait être sous NSMatrix.

J'ai essayé beaucoup de choses avec des limites et des cadres de réglage et j'ai eu beaucoup de confusion.

Existe-t-il un moyen standard ou correct de dimensionner un panneau à son contenu? Comme question secondaire: L'origine d'un cadre se réfère-t-elle à son coin supérieur gauche ou à son coin inférieur gauche? Est-ce toujours cohérent?

Merci

Répondre

1

L'origine d'un cadre NSPanel/NSWindow est toujours le coin inférieur gauche, il est mesuré à partir de l'origine de l'écran.

Si l'origine d'une vue est en haut à gauche ou en bas à gauche dépend de si son aperçu est retourné ou non. Les vues inversées ont leurs origines en haut à gauche. Pour faire ce que vous voulez, vous devez obtenir la taille d'image de NSMatrix, puis recalculer la disposition du panneau.

Quelque chose comme ça (écrit ici, non testé!):

//NSMatrix* matrix; 
//NSPanel* panel; 
CGFloat panelMargin = 10.0; 
CGFloat matrixBottomMargin = 30.0; 

[matrix sizeToCells]; 
NSRect matrixFrame = [matrix frame]; 

NSRect panelFrame = [panel frame]; 

NSSize newPanelSize = NSMakeSize(NSWidth(matrixFrame) + 2.0 * panelMargin, 
       NSHeight(matrixFrame) + 2.0 * panelMargin + matrixBottomMargin); 

CGFloat yDelta = newPanelSize.height - NSHeight(panelFrame); 

panelFrame = NSMakeRect(panelFrame.origin.x, 
         panelFrame.origin.y - yDelta, 
         newPanelSize.width, 
         newPanelSize.height); 
[panel setFrame:panelFrame display:YES];