2009-06-28 4 views
2

При написании приложений Cocoa я использую большую часть макета пользовательского интерфейса программно. Например:Есть ли способ программно определить правильные размеры встроенных элементов управления Apple?

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

Мой вопрос об этом kDefaultPopUpButtonHeight постоянный. В настоящее время я поддерживаю исходный файл, полный таких констант, и я вручную заполняю нужные размеры. Я могу определить правильные размеры, отбросив новый элемент управления в пустой вид в Interface Builder, а затем проверив его свойства, чтобы узнать, какой размер IB дает.

Должен быть лучший способ. Возможно ли получить доступ к этим значениям во время выполнения? В идеале я ожидал бы, что каждый NSControl будет иметь метод класса: +(NSSize)defaultSize или для элементов управления, таких как NSButton, которые имеют разные размеры по умолчанию в зависимости от конкретного стиля кнопки, что-то вроде +(NSSize)defaultSizeForButtonStyle:(NSButtonStyle)buttonStyle.

Apple's Human Interface Guidelines имеет информацию о контрольной компоновке и расстоянии от элементов управления, но он ничего не говорит о правильных размерах для отдельных элементов управления.

+1

«При написании приложений Cocoa я использую большую часть макета пользовательского интерфейса программно». Почему? Nibs намного проще и не требуют поддержки заголовка, полного записанных деталей реализации. –

+0

@Peter Hosey: Личные предпочтения, основанные на моем собственном опыте. Я начал использовать IB для всего, а затем перешел на uisng только для макета. После того, как я работал над приложением, в котором мы написали полный пользовательский интерфейс с нуля (вообще никаких элементов управления Apple), я обнаружил, что я был более удобным (и более эффективным) с интерфейсом, когда делал все в программном обеспечении. –

+1

IB - отличный инструмент, и его следует использовать, когда это возможно, но он никогда не сможет сравниться с возможностью управления всем интерфейсом программно. В конце мы разработчики, и инструменты эффективны только в том случае, если они сэкономит вам время и разочарование. Часто случается, когда IB мешает тому, что вам нужно выполнить, и в те времена вам нужно запрограммировать себя. – Paulo

ответ

1

Я согласен с Питером и рекомендую использовать интерфейс Builder. Но если это не подходит в вашей ситуации, вот один из способов, чтобы найти оптимальный размер для большинства элементов управления:

NSSize idealSize = [[control cell] cellSize]; 

Если вам нужно больше контроля над калибровкой, вы можете использовать - [NSCell cellSizeForBounds:] метод ,

Кроме того, cellSize действительно дает вам минимальный размер для элемента управления, не обязательно лучший размер. Например, для кнопки стиля аква-стиля Cocoa с текстом «ОК» она вернет ширину, которая будет более узкой, чем рекомендовал HIG. Для ваших целей это звучит так, будто вас интересует только фиксированная высота. - [NSCell cellSize] должен работать отлично.

+0

Извините, это заняло так много времени, чтобы отметить это как принято. У меня не было возможности проверить это до сих пор, но cellSize - именно то, что я искал. Спасибо! –