好的,我承认我对以编程方式操作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的正中间




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

最佳答案

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

现在将您的makeStretchable更改为:

[self setAutoresizingMask:FLEX_WIDTH|FLEX_HEIGHT];


那应该做。 :)

一段历史:
在旧版的Interface Builder(2.x及以下)中,弹簧代表“设置”位。
在新的Interface Builder(从3开始)中,弹簧由“夹具”代替,这更有意义,但这也意味着在以编程方式更改标志时,您需要做一些相反的思考。

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

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

10-04 21:57