2009-06-28 4 views
2

Lors de l'écriture d'applications Cocoa, je fais la majorité de la mise en page de l'interface utilisateur par programmation. Par exemple:Existe-t-il un moyen de déterminer par programme les tailles appropriées pour les contrôles intégrés d'Apple?

NSRect popUpFrame = NSMakeRect(10, 10, 100, kDefaultPopUpButtonHeight); 
NSPopUpButton * popUp = [[NSPopUpButton alloc] initWithFrame:popUpFrame]; 
//... 

Ma question concerne la constante kDefaultPopUpButtonHeight. Je maintiens actuellement un fichier source plein de telles constantes, et je remplis les tailles appropriées manuellement. Je suis capable de déterminer les tailles correctes en déposant un nouveau contrôle dans une vue vide dans Interface Builder et en vérifiant ses propriétés pour voir ce que la taille IB lui donne.

Il doit y avoir un meilleur moyen. Est-il possible d'accéder à ces valeurs lors de l'exécution? Idéalement, je m'attendrais à NSControl avoir une méthode de classe quelque chose comme: +(NSSize)defaultSize, ou, pour les contrôles comme NSButton qui ont différentes tailles par défaut en fonction du style de bouton particulier utilisé, quelque chose comme +(NSSize)defaultSizeForButtonStyle:(NSButtonStyle)buttonStyle.

Apple's Human Interface Guidelines contient des informations sur la mise en page de commande et l'espacement entre contrôles, mais il ne dit rien sur les tailles appropriées pour les contrôles individuels.

+1

"Lors de l'écriture d'applications Cocoa, je fais la majorité de la mise en page de l'interface utilisateur par programme." Pourquoi? Les Nibs sont tellement plus faciles, et ne nécessitent pas de maintenir un en-tête rempli de détails d'implémentation enregistrés. –

+0

@Peter Hosey: Préférence personnelle, basée sur mes propres expériences. J'ai commencé à utiliser IB pour tout, puis j'ai migré pour l'utiliser uniquement pour la mise en page. Après avoir travaillé sur une application dans laquelle nous avons écrit une interface utilisateur complète à partir de zéro (pas de contrôles Apple du tout), j'ai trouvé que j'étais plus à l'aise (et plus efficace) avec la mise en page quand j'ai tout fait en logiciel. –

+1

IB est un excellent outil et il devrait être utilisé lorsque cela est possible, mais il ne sera jamais capable de se comparer à la possibilité de contrôler l'ensemble de l'interface par programmation. Au final, nous sommes des développeurs et les outils ne sont efficaces que s'ils vous font gagner du temps et de la frustration. Il arrive souvent que l'IB fasse obstacle à ce que vous devez accomplir et, pour ces moments-là, vous devez vous programmer. – Paulo

Répondre

1

Je suis d'accord avec Peter, et je vous recommande d'utiliser Interface Builder. Mais si cela ne convient pas à votre situation, voici une façon de trouver la meilleure taille pour la plupart des contrôles: -: méthode

NSSize idealSize = [[control cell] cellSize]; 

Si vous avez besoin de plus de contrôle sur le dimensionnement, vous pouvez utiliser les touches [NSCell cellSizeForBounds] . En outre, cellSize vous donne vraiment la taille minimale pour un contrôle, pas nécessairement la meilleure taille. Par exemple, pour un bouton-poussoir Cocoa aqua style avec le texte "OK", il retournera une largeur plus étroite que celle recommandée par le HIG. Pour vos besoins, il semble que vous êtes uniquement intéressé par la partie fixe de la taille. - [NSCell cellSize] devrait fonctionner correctement.

+0

Désolé, cela a pris tellement de temps pour marquer cela comme accepté. Je n'ai pas eu l'occasion de le tester jusqu'à présent, mais cellSize est exactement ce que je cherchais. Je vous remercie! –

Questions connexes