好吧,我承认我以编程方式操纵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
的正中心我确定它与我的调整大小掩码有关(或者我正在添加视图的方式?),但我仍然无法弄明白。有什么想法吗?
答案 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之间的右边距是灵活的。”
...等等;例如。所有设置位都是“灵活的”,否则它们是“固定的”......