NSScrollView填充边距

6
我有一个包含NSTableView的NSScrollView。
如图所示,有一个高为100px的NSView覆盖在表视图上面。(这是故意做的,覆盖略微透明,并且您可以看到表视图滚动的阴影)。
问题当然是我需要在滚动视图底部添加100px的空白来弥补覆盖层。否则,您将无法看到表格底部,因为被覆盖层覆盖住了。
我尝试修改剪辑视图,但好像只能更改其框架(失去透明覆盖效果)。
也许我没做对,请帮忙!

只是一个想法。如果在重新加载数据后将scrollView的contentSize增加100像素会怎样?另一个想法是添加空行以匹配覆盖层。 - Evgeny Shurakov
@EvgeniyShurakov 我尝试对滚动视图进行子类化,并覆盖 contentSize 方法并将高度增加100像素。这是正确的方法吗?但对我没有任何影响。 - Alex Marchant
2个回答

7

好的,我找到了解决方法,我需要不断地扩大documentView框架。

我发现最好的方法是对文档视图进行子类化,这种情况下它是NSTableView。

在子类化的NSTableView中,我重写了setFrameSize:(NSSize)newSize方法。

- (void)setFrameSize:(NSSize)newSize {
    newSize.height += 100;
    [super setFrameSize:newSize];
}

这会在表视图和滚动视图的底部添加100像素的填充。


NSScroller怎么样?它能正确停在音乐控件视图的上边缘吗?还是会重叠在NSScroller上? - Raffael
@Raffael 滚动条最终会与音乐控件视图重叠,这并不理想,但也不是很糟糕。如果你找到更好的解决方法,我会很感兴趣听听。 - Alex Marchant
我很想告诉你更好的方法,但我也在寻找一个 :P。 - Raffael
@Raffael 在这种情况下,音乐控制视图重叠了NSScrollView,因此滚动条的行为就像它被编程的那样。如果您想要将滚动条人为地停止在较高位置,我想您还需要子类化NSScroller并修改其绘图代码。 - Alex Marchant
谢谢,不过我为我的特殊情况设置了一个新的线程:http://stackoverflow.com/questions/19233180/shrink-nsscroller-of-nsscrollview-in-layer-backed-view - Raffael

2

这是同样的代码,但使用了 Swift 4

class TableViewPadded: NSTableView{
  //Add padding at bottom
  override func setFrameSize(_ newSize: NSSize) {
    let padded = NSSize(width: newSize.width, height: newSize.height+30)
    super.setFrameSize(padded)
  }
}

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