我遇到了以下问题。有一个内含基于视图的 NSTableView 的子类 NSScrollView。在子类的 -drawRect: 方法中,我已经为滚动视图添加了自定义背景,现在我想在内部表格周围添加一些“填充”,就像这样:
example http://img.skitch.com/20120117-ktd9g5wy8u9cm37jeebjjxx61u.png
我该如何实现这个功能?
[scrollView setAutomaticallyAdjustsContentInsets:NO];
[scrollView setContentInsets:NSEdgeInsetsMake(top, right, bottom, left)];
左右内边距可以在行/单元格内部完成。对于上下内边距,我建议添加没有内容且不可选择的额外行。这并不美观,但对我有用。
最终,我解决了这个问题。我创建了一个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的原点。我也对我的tableview进行了子类化,在-reloadData方法中,当tableview更改其内容时,我可以调整documentContentView的大小。
drawRect:
中添加背景。如果您正在子类化,请在initWithFrame:
中添加它,或者从调用者更改它。NSTableView
的frame
,使其更小,并且具有不在0,0处的原点。
NSTableView
会自行滚动(您可以在文档中看到它是UIScrollView的子类);如果您不想要任何特别的东西,就没有必要将其包装在scrollView中。 - fzwo-
20,[super frame].size.height-
20)来获得所需的填充。 - fzwo