我遇到了以下问题。有一个子类NSScrollView,其中包含基于NSTableView的视图。我在子类的-drawRect:方法中为scrollview添加了一个自定义背景,现在我想在内部tableview周围添加一些“填充”,如下所示:
example http://img.skitch.com/20120117-ktd9g5wy8u9cm37jeebjjxx61u.png
我该如何实现?
答案 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)
左右填充可以在行/单元格本身内部完成。对于顶部和底部填充,我建议添加没有内容且不可选择的其他行。这不性感,但对我有用。