我有一個NSPopover
窗口,其中包含一個NSTableView
。我想刪除表格視圖中的空行,以便我可以使用自動佈局來使彈出窗口適合表格視圖。現在我必須爲表格視圖指定一個固定的大小,這是不好的,因爲當表格視圖中的行數很少時,它會在窗口中留下很多空間。如何刪除NSTableView中的空行?
對於iOS,問題和答案是Resizing UITableView to fit content。不幸的是,它不適用於OS X.
我有一個NSPopover
窗口,其中包含一個NSTableView
。我想刪除表格視圖中的空行,以便我可以使用自動佈局來使彈出窗口適合表格視圖。現在我必須爲表格視圖指定一個固定的大小,這是不好的,因爲當表格視圖中的行數很少時,它會在窗口中留下很多空間。如何刪除NSTableView中的空行?
對於iOS,問題和答案是Resizing UITableView to fit content。不幸的是,它不適用於OS X.
NSTableView
的一個實例的作用與UITableView
的實例不同。基本上OS X可滾動表格視圖是NSScrollView
的一個實例,其中包含NSTableView
的一個實例作爲文檔視圖。
- NSScrollView和NSClipView
這兩個類都沒有表的一部分看法,也不是必需的,但實際上使用的是彌補滾動視圖類中顯示的所有表視圖機制。
本文檔視圖由滾動視圖,其是滾動視圖本身的子視圖的片段視圖(「該文件區」)限幅。
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)]];
}
是的,你可以美化,在許多方向。然而,這只是爲了證明你必須做什麼以及使用哪些工具。
我不明白這個問題。 – Droppy
@Droppy如果在表格視圖中沒有足夠的內容,iOS桌面視圖顯示帶有分隔線的空行。通常的技巧來防止這種情況是設置頁腳視圖。 – Andy
使用[self.tableView sizeToFit];在viewDidAppear –