好的,我承认我对以编程方式操作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:“接收器及其超级视图之间的右边距是灵活的。”
...等等;例如。所有设置的位都是“灵活的”,否则它们是“固定的” ...