在NSTableView周围填充

时间:2012-01-17 14:55:07

标签: objective-c cocoa nstableview padding nsscrollview

我遇到了以下问题。有一个子类NSScrollView,其中包含基于NSTableView的视图。我在子类的-drawRect:方法中为scrollview添加了一个自定义背景,现在我想在内部tableview周围添加一些“填充”,如下所示:

example http://img.skitch.com/20120117-ktd9g5wy8u9cm37jeebjjxx61u.png

我该如何实现?

4 个答案:

答案 0 :(得分:2)

最后,我已经解决了这个问题。我已经创建了一个NSView(我们称之为documentContentView),将我的NSTableView添加为此documentContentView的子视图,然后我将documentContentView添加到scrollview的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];

我已经创建了名为CustomClipView的自定义NSClipView(基于本文http://www.cocoadev.com/index.pl?CenteringInsideNSScrollView),并且该子类在调整窗口大小时设置documentContentView的原点。我也将子视图子类化了,在-reloadData方法中,当tableview改变它的内容时,我可以调整documentContentView的大小。

答案 1 :(得分:2)

如果您的目标是Mac OS 10.10或更高版本,则可以使用

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

答案 2 :(得分:1)

首先,不要在drawRect:中添加背景。如果您正在进行子类化,请将其添加到initWithFrame:中,或者从调用者更改它。

添加填充很容易:更改frame的{​​{1}}以使其更小,并且原点不是0,0。

答案 3 :(得分:1)

左右填充可以在行/单元格本身内部完成。对于顶部和底部填充,我建议添加没有内容且不可选择的其他行。这不性感,但对我有用。