1

OK、私はプログラムによる操作NSViewとそのサイズ変更がこれほど上手くいったことは一度もないことを認めます。だから、ここに私はいます:

  • タブビューがあります
  • 新しいものを追加しますNSTabViewItem
  • それぞれNSTabViewItemに1つ含ま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カテゴリ(for 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最小限で(1行のみのように)、それぞれの中心に座っていますNSTabViewItem

サイズ変更マスク(またはビューを追加する方法)と関係があると確信していますが、それでも理解できません。何か案は?

4

1 に答える 1

1

FIX_LEFT、FIX_RIGHTなどを含め、すべてのFIX_*はFLEX_*である必要があります。

次に、makeStretchableを次のように変更します。

[self setAutoresizingMask:FLEX_WIDTH|FLEX_HEIGHT];

それはそれをする必要があります。:)

ちょっとした歴史:
古いInterface Builder(2.xまで)では、スプリングは「セット」ビットを表していた。新しいInterfaceBuilder(3以降)では、スプリングが「フィクスチャ」に置き換えられました。これは非常に理にかなっていますが、プログラムでフラグを変更する場合は、反対の考え方をする必要があることも意味します。

したがって、フラグの意味(Appleのドキュメントから)は次のとおりです。

NSViewMinXMargin:「レシーバーとそのスーパービューの間の左マージンは柔軟です。」
NSViewWidthSizable:「レシーバーの幅は柔軟です。」
NSViewMaxXMargin:「レシーバーとそのスーパービューの間の右マージンは柔軟です。」
...等々; 例えば。設定されたすべてのビットは「柔軟」です。それ以外の場合は「固定」されます。

于 2013-02-16T11:19:45.067 に答える