NSTableView周围的填充

4
我遇到了以下问题。有一个内含基于视图的 NSTableView 的子类 NSScrollView。在子类的 -drawRect: 方法中,我已经为滚动视图添加了自定义背景,现在我想在内部表格周围添加一些“填充”,就像这样: example http://img.skitch.com/20120117-ktd9g5wy8u9cm37jeebjjxx61u.png 我该如何实现这个功能?
4个回答

4
如果你的目标是Mac OS 10.10或更高版本,你可以使用:
[scrollView setAutomaticallyAdjustsContentInsets:NO];
[scrollView setContentInsets:NSEdgeInsetsMake(top, right, bottom, left)];

2

左右内边距可以在行/单元格内部完成。对于上下内边距,我建议添加没有内容且不可选择的额外行。这并不美观,但对我有用。


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的原点。我也对我的tableview进行了子类化,在-reloadData方法中,当tableview更改其内容时,我可以调整documentContentView的大小。


0
首先,不要在drawRect:中添加背景。如果您正在子类化,请在initWithFrame:中添加它,或者从调用者更改它。
添加填充很容易:更改NSTableViewframe,使其更小,并且具有不在0,0处的原点。

很可能我误解了答案。我已经重写了子类化表视图的-frame方法:
  • (NSRect)frame { NSRect aFrame = [super frame]; NSRect newFrame = NSMakeRect(0, 0, aFrame.size.width + 20, aFrame.size.height + 20); newFrame.origin.x = -10; newFrame.origin.y = -10; return newFrame; }
它几乎可以工作,但不幸的是,表格的右侧在滚动视图中不可见,并且似乎滚动视图无法正确处理我的更改,因为如果底部一半的行超出可见区域,则右侧滚动条不会自动出现。
- vbali
我现在没有时间详细向你解释,但请查找“UIScrollView.contentSize”以告诉scrollView其内容应该有多大。此外,在您的newFrame中,大小应为-20,而不是+20。还请注意,通常情况下,如果需要,NSTableView会自行滚动(您可以在文档中看到它是UIScrollView的子类);如果您不想要任何特别的东西,就没有必要将其包装在scrollView中。 - fzwo
不幸的是,NSScrollView的contentSize是只读属性。我已经重写了我的NSScrollView子类的-contentSize访问器,并返回其documentView的frame.size,但它不起作用:(我已经阅读了NSScrollView、NSTableView和NSClipView的整个文档,但我仍然不明白如何完成这个简单的任务。 - vbali
对不起,我不应该在一个评论中混淆这两个问题(我也搞混了Mac和iOS)。你可以通过将tableView的frame设置为NSMakeRect(-10,-10,[super frame].size.width-20,[super frame].size.height-20)来获得所需的填充。 - fzwo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接