2016-06-13 8 views
0

私はNSPopoverウィンドウにはNSTableViewが含まれています。テーブルビューに空の行を削除したいので、オートレイアウトを使用して、テーブルビューに合わせてポップオーバーウィンドウを作ることができます。今はテーブルビューに固定サイズを割り当てる必要があります。これは、テーブルビューに行が少ないときにウィンドウに多くのスペースを残すためです。NSTableViewで空の行を削除するには?

iOSの場合は、質問と回答はResizing UITableView to fit contentです。残念ながら、OS Xには適用されません。

+0

質問が分かりません。 – Droppy

+0

@Droppy on iOSのテーブルビューでは、テーブルビューに十分なコンテンツがない場合、セパレータ行を含む空の行が表示されます。これを防ぐための通常のトリックは、フッタービューを設定することです。 – Andy

+0

[self.tableView sizeToFit]を使用します。 viewDidAppearで –

答えて

0

NSTableViewのインスタンスは、UITableViewのインスタンスとは異なる動作をします。基本的にOS Xのスクロール可能なテーブルビューにはNSScrollViewのインスタンスがあり、ドキュメントビューとしてNSTableViewのインスタンスが含まれています。

  • NSScrollViewとNSClipView

これらの2つのクラスは、テーブルの一部ではないビューやスクロールビューを構成するクラスを使用して、彼らが必要と-されますが、事実上すべてのテーブルビューが表示されます機構。

Apple Doc

このドキュメントビューは、スクロールビュー自体のサブビューであり、スクロールビューのクリップビュー(「文書領域」)によってクリップされます。

Hereスクロールビュー階層の説明があります。

したがって、テーブルビュー自体は非スクロールビューです。そのサイズはコンテンツ(行数)から自動的に採用されます。必要なものと必要なものすべてが自動的に採用されます。

  • その階層のうち、テーブルビュー「操作」:親ビューなしに単一のテーブルビューを使用し

    は、したがって、あなたの目標を取得するための2つの方法があります。これはではありません。テーブルビューをウィンドウに置くと、IBで何が得られますか?手動で行うか、コード内にテーブルビューを構築する必要があります。

  • autolayoutを使用して、親スクロールビューをテーブルビューにリサイズします。

私は、スクロールしてクリップするものがない場合は、テーブルビューの周りにクリップビューを持つスクロールビューを持つ理由がわからないので、最初のアプローチが好きです。しかし、2番目のアプローチもうまくいくはずです。

質問がある場合は、コメントとして追加してください。ここで

は一例です:

私は私はあなたがIBから得るもの、(その手段が「テーブルビュー」を入れて、それがより良い説明

http://sendvid.com/0lu0tgda?secret=d7b751f9-a3e9-4cd1-9865-20884b0bd6c8

のためにそれのビデオを作りましたテーブルが内部にあるスクロールビュー階層)をウィンドウに挿入し、左側に配置します。私は簡単な挿入と削除を得るためにいくつかのバインディングを行いました。ちょうど普通のもの。

それから私は、そのテーブルビューにスクロールビューを交換する、方法があります:

- (IBAction)replaceView:(id)sender 
{ 
    // Exchange the view 
    NSView *contentView = self.scrollView.superview; 
    NSTableView *tableView = self.tableView; 

    [contentView addSubview:self.tableView];  // Isolate the table view and make it the new subview 
    NSRect frame; 
    frame.origin = self.scrollView.frame.origin; // Take the location from the scroll view 
    frame.size = tableView.frame.size;   // Take the table views size 
    tableView.frame = frame; 
    [self.scrollView removeFromSuperview];  // Remove the meaningless scroll view 

    // Size the window to the table view 
    NSWindow *window = contentView.window; 
    NSRect contentFrame = contentView.frame; 
    contentFrame.size.height = frame.size.height; 
    NSRect windowFrame = window.frame; 
    windowFrame.size.height = [window frameRectForContentRect:contentFrame].size.height; 
    [window setFrame:windowFrame display:YES]; 

    // Set constraints to make the window resizing, when table view resizes 
    [contentView addConstraints: 
    [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[tableView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(tableView)]]; 
} 

うん、あなたは多くの方向にそれを美化することができます。しかし、あなたがしなければならないことと使用するツールを実証するだけです。

+0

ヘッダービューではどうしますか? – Willeke

+0

ヘッダービューはスクロールしないので、テーブルビュー自体の一部ではないので、その必要はありません。 –

+0

ヘッダーがなくなります(タイトル、並べ替え、サイズ変更、移動)。 – Willeke

関連する問題