Есть ли способ программно определить правильные размеры встроенных элементов управления Apple? - PullRequest
2 голосов
/ 29 июня 2009

При написании приложений Какао я делаю большую часть макета пользовательского интерфейса программно. Например:

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

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

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

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

1 Ответ

1 голос
/ 29 июня 2009

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

NSSize idealSize = [[control cell] cellSize];

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

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

...