2013-02-15 5 views
1

ОК, я признаю, что я никогда не был так хорош с программным управлением NSView и его изменением размера. Итак, я здесь:Добавление поднабора NSTextView в NSTabViewItem

  • У нас есть Tab View
  • Мы добавляем новый NSTabViewItem
  • Каждый NSTabViewItem будет содержать один NSTextView в нем, которая тянется и занимает все пространство NSTabViewItem.

Вот мой код:

NSTabViewItem *newItem = [[(NSTabViewItem*)[NSTabViewItem alloc] initWithIdentifier:newDocument] autorelease]; 

NSTextView* tv = [[NSTextView alloc] initWithFrame:NSZeroRect]; 
[tv makeStretchable]; 

[[newItem view] setAutoresizesSubviews:YES]; 
[[newItem view] addSubview:tv]; 
[newItem setLabel:@"Untitled"]; 
[tabView addTabViewItem:newItem]; 
[tabView selectTabViewItem:newItem]; 

Моя NSView категория (для makeStretchable):

#define FIX_LEFT NSViewMinXMargin 
#define FIX_RIGHT NSViewMaxXMargin 
#define FIX_TOP  NSViewMinYMargin 
#define FIX_BOTTOM NSViewMaxYMargin 
#define FIX_WIDTH NSViewWidthSizable 
#define FIX_HEIGHT NSViewHeightSizable 

- (void)makeStretchable 
{ 
    [self setAutoresizingMask:FIX_LEFT|FIX_TOP|FIX_BOTTOM| 
           FIX_RIGHT|FIX_WIDTH|FIX_HEIGHT]; 
} 

Вопрос:

  • NSTextView минимальна (как одна линия только) и сидит в самом центре каждого NSTabViewItem

Я уверен, что что-то делать с моей изменения размера маски (или, возможно, так я Добавляю вид?), но я все еще не могу понять. Есть идеи?

ответ

1

Все ваши FIX_ * должны быть FLEX_ *, в том числе FIX_LEFT, FIX_RIGHT и т.д.

Теперь изменить свой makeStretchable в:

[self setAutoresizingMask:FLEX_WIDTH|FLEX_HEIGHT]; 

Это должно сделать это. :)

Немного истории:
В старом построителе интерфейсов (вплоть до 2.x) пружины представляли бит «set». В новом интерфейсе Builder (от 3 и выше) пружины были заменены на «приспособления», что имеет гораздо больший смысл, но это также означает, что вам нужно сделать некоторое неосторожное мышление, когда вы программным образом меняете флаги ,

Таким образом, значение флагов (из документации компании Apple) являются:

NSViewMinXMargin: «Левая граница между приемником и его надтаблицей является гибкой.»
NSViewWidthSizable: «Ширина приемника является гибкой».
NSViewMaxXMargin: «Правильный запас между ресивером и его надзором является гибким».
... и так далее; например. все установленные биты «гибкие», в противном случае они «исправлены» ...

+0

Самое смешное, что я сделал это как раз наоборот: удалив все **, но **: 'FIX_WIDTH' и' FIX_HEIGHT' –

+0

Возможно, я неправильно понял значение FIX_ *; Я нахожу имена NS * менее запутанными (будет ли Apple удалять путаницу с Cocoa?).-Но в соответствии с вашим #define, FIX_WIDTH и FIX_HEIGHT перевернуты. Примечание. Если в вашем представлении нет установленных флагов, он будет располагаться горизонтально и вертикально, но он не будет растягиваться. – 2013-02-16 11:55:34

+0

Ну, из-за этого ... Путаница какао, что я пробовал «приручить» автомасштабирующие маски с помощью макросов и определений. Хотя в этом конкретном случае это оказался неправильный выбор ... (чаще, это не *) lol –

Смежные вопросы