将NSTextView子视图添加到NSTabViewItem

时间:2013-02-15 10:02:43

标签: objective-c cocoa resize nsview

好吧,我承认我以编程方式操纵NSView及其调整大小,从未如此出色。所以,我在这里:

  • 我们有一个标签视图
  • 我们正在添加新的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 个答案:

答案 0 :(得分:1)

你所有的FIX_ *应该是FLEX_ *,包括FIX_LEFT,FIX_RIGHT等。

现在将makeStretchable更改为:

[self setAutoresizingMask:FLEX_WIDTH|FLEX_HEIGHT];

应该这样做。 :)

一点历史:
在旧的Interface Builder中(最多包括2.x),spring表示'set'位。 在新的Interface Builder中(从3开始),弹簧被“灯具”取代,这更有意义,但这也意味着当你以编程方式更改旗帜时需要进行一些相反的思考。

因此,旗帜的含义(来自Apple的文档)是:

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