1

好的,我承认我从来没有那么擅长以编程方式操作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

我确定这与我的调整大小蒙版有关(或者可能是我添加视图的方式?),但我仍然无法弄清楚。有任何想法吗?

4

1 回答 1

1

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

现在将您的 makeStretchable 更改为:

[self setAutoresizingMask:FLEX_WIDTH|FLEX_HEIGHT];

那应该这样做。:)

一点历史:
在旧的 Interface Builder(直到并包括 2.x)中,弹簧代表“设置”位。在新的 Interface Builder(从 3 起)中,弹簧被替换为“夹具”,这更有意义,但这也意味着当您以编程方式更改标志时,您需要做一些相反的思考。

因此,标志的含义(来自 Apple 的文档)是:

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

于 2013-02-16T11:19:45.067 回答