2016-06-13 72 views
0

我有一個NSPopover窗口,其中包含一個NSTableView。我想刪除表格視圖中的空行,以便我可以使用自動佈局來使彈出窗口適合表格視圖。現在我必須爲表格視圖指定一個固定的大小,這是不好的,因爲當表格視圖中的行數很少時,它會在窗口中留下很多空間。如何刪除NSTableView中的空行?

對於iOS,問題和答案是Resizing UITableView to fit content。不幸的是,它不適用於OS X.

+0

我不明白這個問題。 – Droppy

+0

@Droppy如果在表格視圖中沒有足夠的內容,iOS桌面視圖顯示帶有分隔線的空行。通常的技巧來防止這種情況是設置頁腳視圖。 – Andy

+0

使用[self.tableView sizeToFit];在viewDidAppear –

回答

0

NSTableView的一個實例的作用與UITableView的實例不同。基本上OS X可滾動表格視圖是NSScrollView的一個實例,其中包含NSTableView的一個實例作爲文檔視圖。

  • NSScrollView和NSClipView

這兩個類都沒有表的一部分看法,也不是必需的,但實際上使用的是彌補滾動視圖類中顯示的所有表視圖機制。

Apple Doc

本文檔視圖由滾動視圖,其是滾動視圖本身的子視圖的片段視圖(「該文件區」)限幅。

Here你有一個滾動視圖層次結構的解釋。

因此,表視圖本身是一個非滾動視圖,其大小自動從其內容(行數)中採用 - 以及您想要的一切和所需的一切。

因此有兩種方式來獲得你的目標:

  • 「操作」表視圖出其層次:使用無其父視圖的單表視圖。這是而不是當你在窗口中放置一個表格視圖時,你在IB中得到了什麼。您必須手動執行該操作,或者在代碼中構建表視圖。

  • 使用autolayout將父級滾動視圖調整爲表視圖。

我更喜歡第一種方法,因爲我看不到任何理由與周圍的表視圖夾視圖滾動視圖,如果沒有什麼滾動和剪輯。但是,第二種方法也應該起作用。

如果您有任何問題,只需將其添加爲評論。

下面是一個例子:

我做了它的視頻更好的解釋

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

我把「泰伯維」(這意味着,你從IB得到什麼,所以它是一個帶有桌子的滾動視圖層級)放入一個窗口並放置在左側。我做了一些綁定以便於插入和刪除。只是通常的東西。

然後,我有一個方法,其表視圖替換滾動視圖:

- (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

Sou不需要,因爲標題視圖不滾動,所以它不是表視圖本身的一部分。 –

+0

你會丟失標題(標題,排序,調整大小,移動)。 – Willeke