При написании приложений 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 имеет информацию о контрольной компоновке и расстоянии от элементов управления, но он ничего не говорит о правильных размерах для отдельных элементов управления.
«При написании приложений Cocoa я использую большую часть макета пользовательского интерфейса программно». Почему? Nibs намного проще и не требуют поддержки заголовка, полного записанных деталей реализации. –
@Peter Hosey: Личные предпочтения, основанные на моем собственном опыте. Я начал использовать IB для всего, а затем перешел на uisng только для макета. После того, как я работал над приложением, в котором мы написали полный пользовательский интерфейс с нуля (вообще никаких элементов управления Apple), я обнаружил, что я был более удобным (и более эффективным) с интерфейсом, когда делал все в программном обеспечении. –
IB - отличный инструмент, и его следует использовать, когда это возможно, но он никогда не сможет сравниться с возможностью управления всем интерфейсом программно. В конце мы разработчики, и инструменты эффективны только в том случае, если они сэкономит вам время и разочарование. Часто случается, когда IB мешает тому, что вам нужно выполнить, и в те времена вам нужно запрограммировать себя. – Paulo