2012-01-17 75 views

回答

2

最後,我已經解決了這個問題。我創建了一個的NSView(姑且稱之爲documentContentView),加入我的NSTableView的,因爲這documentContentView的子視圖,那麼我已經添加了documentContentView到滾動視圖的documentView:

NSTableView *docView = (NSTableView *)self.scrollView.documentView; 
id newClipView = [[CustomClipView alloc] initWithFrame:[self.scrollView.contentView frame]]; 
[self.scrollView setContentView:(NSClipView *)newClipView]; 
[newClipView setDrawsBackground:NO]; 

NSView *documentContentView = [[NSView alloc] initWithFrame:docView.bounds]; 
docView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable; 
[documentContentView addSubview:docView]; 
[self.scrollView setDocumentView:documentContentView]; 
[self.scrollView setDrawsBackground:NO]; 

我已經建立了我的自定義NSClipView叫CustomClipView(基於此文章http://www.cocoadev.com/index.pl?CenteringInsideNSScrollView),並且此子類在窗口大小調整時設置documentContentView的原點。我已經將我的tableview子類化了,在-reloadData方法中,我可以在tableview更改它的內容時調整documentContentView的大小。

1

首先,不要在drawRect:添加背景。如果您正在進行子類化或將其從調用者中更改,請將其添加到您的initWithFrame:中。

添加填充很簡單:更改NSTableViewframe,使其更小,並且具有原點不是在0,0。

+0

最有可能是我誤會了答案。我已經覆蓋的子類的我的的tableview方法-frame: - (的NSRect)幀 { 的NSRect AFRAME = [超幀]。 NSRect newFrame = NSMakeRect(0,0,aFrame.size.width + 20,aFrame.size.height + 20); newFrame.origin.x = -10; newFrame.origin.y = -10; return newFrame; } 它幾乎工作,但不幸的是,表的右側是不是在滾動視圖可見,它似乎是滾動視圖不能妥善處理我的變化,因爲如果下半區行了可視區域內的中右卷軸不會自動出現。 – vbali 2012-01-17 15:36:42

+0

我沒有時間現在向你詳細解釋這一點,但請查看'UIScrollView.contentSize'來告訴scrollView它的內容應該有多大。另外,在你的newFrame中,尺寸應該是-20,而不是+20。另請注意,通常情況下,如果需要,「NSTableView」會自動滾動(您可以在文檔中看到它是UIScrollView的子類);如果你不想要任何非凡的東西,就不需要將它包裝在scrollView中。 – fzwo 2012-01-17 15:40:55

+0

不幸的是,NSScrollView的contentSize是一個只讀屬性。我已經重寫我的NSScrollView的子類的-contentSize訪問和返回它的documentView的frame.size,但它不工作:(我讀過NSScrollView,NSTableView的和NSClipView整個文檔,但我還是不明白我怎麼能完成這個簡單的任務? – vbali 2012-01-17 16:05:40

1

的左右填充可以行/細胞本身的內部完成。對於頂部和底部填充,我建議添加沒有內容且不可選的其他行。這不是性感,但爲我工作。

1

如果你的目標的Mac OS 10.10或更高版本,可以使用

[scrollView setAutomaticallyAdjustsContentInsets:NO]; 
[scrollView setContentInsets:NSEdgeInsetsMake(top, right, bottom, left)];