2013-02-15 90 views
1

好吧,我承认我从来没有这么好,通过编程操作NSView及其调整大小。所以,我在这里:将NSTextView子视图添加到NSTabViewItem

  • 我们已经有了一个卡视图
  • 我们添加一个新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]; 

应该这样做。 :)

有点历史:
在旧的Interface Builder(直到并包括2.x)中,弹簧表示'set'位。 在新的Interface Builder中(从3开始),弹簧被'fixtures'取代,这使得更有意义,但这也意味着当您以编程方式更改标志时,您需要做一些反思思维。

因此,标志的含义(从苹果公司的文档)是:

NSViewMinXMargin:“接收器和它的父之间的左旁是灵活的。”
NSViewWidthSizable:“接收器的宽度很灵活。”
NSViewMaxXMargin:“接收者与其超级视图之间的右边距是灵活的。”
...等等;例如。所有的设置位都是'灵活的',否则它们是'固定'的...

+0

有趣的是,我通过完全相反的方式使它工作:通过删除所有** **但是:'FIX_WIDTH'和' FIX_HEIGHT' – 2013-02-16 11:20:39

+0

我可能误解了FIX_ *的含义;我发现NS *的名字不那么令人困惑(苹果是否会从Cocoa中解除困惑?)。但根据您的#define,FIX_WIDTH和FIX_HEIGHT是“倒置”的。注意:如果您的视图没有设置标志,它将水平和垂直居中,但不会伸展。 – 2013-02-16 11:55:34

+0

嗯,这是因为......可可混乱,我试图用宏和定义“驯服”自动调整大小的蒙版。虽然在这种特殊情况下,它被证明是错误的选择...(通常情况下,它不是*)lol – 2013-02-16 11:56:57

相关问题