我希望插入NSTableView的内容,以便在表格视图的顶部和第一个单元格之间存在间隙。
在iOS上,使用UITableView很容易 - 通过使用setContentInset:。
实现答案 0 :(得分:1)
重新打开标题并用您自己的子类替换标题视图。覆盖其-drawRect:仅绘制背景颜色。还要覆盖-headerRectOfColumn:以防止绘制任何列标题。我不确定这是否会阻止列拖动或排序,但我敢打赌它会这样做。
答案 1 :(得分:0)
它不是很干净,但你可以通过让第一排高于其余部分来实现这一点。实现heightOfRow
表委托方法:
- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row
{
if (row == 0) {
return normalRowHeight + topPadding;
} else {
return normalRowHeight;
}
}
缺点是您还需要实现自定义突出显示和自定义单元格绘制,以考虑第一行的额外空间。
答案 2 :(得分:0)
该问题询问如何调整类似于iOS的内容插图。当前选择的答案显示了如何将第一行向下移动,但这不是完全一样的。像iOS一样,调整内容插图也会将滚动条的起点移动到插图位置。将内容放在“生动的”或透明工具栏下面时,这很有用。
NSTableView本身没有内容插图。在macOS上,内容插入通常是NSScrollView的一部分。要访问NSTableView的视图控制器的滚动视图,可以使用enclosingScrollview method of NSView,禁用自动调整并按如下所示设置插图:
(在这里警告旧学校Obj-C)
self.enclosingScrollView.automaticallyAdjustsContentInsets = NO;
self.enclosingScrollView.contentInsets = NSEdgeInsetsMake(50.f,0.f,0.f,0.f);
通常可以从viewDidLoad调用它们,但是某些类型的表视图将使用它们自己的值覆盖。
设置为源列表模式的NSOutlineView带有许多默认值,这些默认值被覆盖以使视图看起来像Finder边栏。
没有“干净”的方法来设置这些视图的内容插入。它们固执地覆盖了您的值,我发现,如果您将NSOutlineView子类化并重载setFrameSize:
,它将可以解决问题。像这样(在NSOutlineView子类内部):
- (void)setFrameSize:(NSSize)newSize {
[super setFrameSize:newSize];
self.enclosingScrollView.automaticallyAdjustsContentInsets = NO;
self.enclosingScrollView.contentInsets = NSEdgeInsetsMake(100.f,0.f,0.f,0.f);
}
这可以解决问题,但是初始滚动位置会很奇怪。从子类的initWithCoder:方法调用scrollToBeginningOfDocument:
会将其滚动到正确的初始位置。
答案 3 :(得分:-1)
scrollView.automaticallyAdjustsContentInsets = false
scrollView.contentInsets = NSEdgeInsets(top: 40, left: 0, bottom: 0, right: 0)